Widersprüchliche IO-Standards beheben

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 & RoutePhase 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:Basys 2 Bankschema und CP132-Paket

Antworten (3)

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.

Spartan 3E IOSTANDARDs

Sehen Sie sich nun die letzte Seite des Basys2-Schemas an.

Basys2 FPGA-Leistung

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.

  1. Schwere Operation auf der Basys2-Platine, entsprechende Änderung der VCCOs. Wahrscheinlich nicht wert.

  2. 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.

  3. 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.

Wie gehen Sie vor, wenn Sie eine ganze Bank auf LVCMOS18 setzen? Im Moment ist jeder pmod-Pin in JA auf 1,8 V eingestellt, gibt aber immer noch eine Toleranz von 3,3 V, was nach allem, was ich gelesen habe, aber dieser Kommentar das einzige Niveau zu sein scheint, das das Board bietet. Ich habe zufällig einige 74LVC-Chips und habe gerade einen an mein Steckbrett angeschlossen, daher ist dies möglicherweise die einzige Option. Der Angstfaktor ist für mich jetzt präsenter, da ich weiß, dass die Tools mich nicht vor der realen Welt schützen. Ich bin immer noch ein bisschen ein Noob, wenn es darum geht, externe Chips zu verwenden und wo Widerstände usw. verwendet werden. Hoffentlich bringt mich die zusätzliche Schicht nicht zum Stolpern.
"Sie können die gewünschte LVCMOS18-Ausgabe nicht ausführen. Deshalb geben die Tools einen Fehler aus." Es ist richtig, dass LVCMOS18 nicht mit diesem Board verwendet werden kann, wie es ist. Aber das erklärt den Fehler nicht. Die Tools wissen nichts über den Platinenschaltplan. Wenn Sie nach LVCMOS18 fragen, gehen sie davon aus, dass Sie einen geeigneten VCCO bereitstellen.
"Weil die Tools Ihnen gerne eine Bitdatei geben, die Ihr FPGA aufgrund inkompatibler E / A ausbrennt" ist nicht ganz richtig. Es schadet dem FPGA nicht, für diese Bank einen anderen E/A-Standard als den Vcco auszuwählen. Die von Ihnen zitierte Tabelle zeigt, dass Sie einen E / A-Standard als Eingang mit einer höheren Spannung Vcco verwenden können. Jede Beschädigung des FPGA würde durch das Anlegen einer Spannung an einen I/O entstehen, die die im Datenblatt angegebenen absoluten Höchstwerte überschreitet. Die Tools haben keine Ahnung, was Sie physisch an den Chip anschließen und können daher nicht für das "Ausbrennen Ihres FPGA" verantwortlich gemacht werden.
@Amoch, ja, du hast Recht. Ich wollte eine strenge Warnung aussprechen, ging aber zu weit. Bei Gelegenheit werde ich das Ganze noch einmal überarbeiten.

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.

Diese ucf-Kommentare stammen direkt aus dem Digilent .ucf-Download für Basys 2, daher war ich mir nicht sicher, ob sie überhaupt richtig waren. Ich habe gerade das Basys 2-Schema und das CP132-Paket gepostet und werde es noch einmal überprüfen.
Okay, diese Banknummern sind korrekt, wie ich mir angesehen habe. Ich habe mclk und LED<7> IOSTANDARD = LVCMOS18 hinzugefügt und es wird kompiliert, aber die E / A beträgt immer noch 3,3 V. Ich verwende ein Multimeter und messe vom GND am PMOD-Anschluss. Ich bin mir auch nicht sicher, ob es eine Möglichkeit gibt, VCC von 3,3 V zu ändern
Sie müssen die VCCIO-Pins für diese Bank mit einer geeigneten Stromschiene verbinden. +3,3 V für LVTTL, +1,8 V für LVCMOS18. Sonst könnten schlimme Dinge passieren.
Wie bereits erwähnt, denke ich, dass der einzige Weg, VCCIO zu setzen, darin besteht, Frankenstein auf das Board zu setzen, und ich weiß nicht, wo ich damit anfangen soll ... Wie haben Sie die Banknummern so schnell herausgefunden? Es dauerte eine Weile, bis ich es vom Schaltplan zum Chip passte. Level Shifting ist meiner Meinung nach die einzig vernünftige Option. Ich frage mich, was die bessere Option ist: Pegelverschiebung auf SPI-Leitungen, die zum FPGA gehen, oder die Daten, die in den SPI-Chip kommen (das wären 3,3 V, die aus dem SPI-Chip kommen). Ich plane, mit der 10-MHz-Spezifikation des MCP23S17-Porterweiterungschips zu arbeiten.
Es gibt eine ASCII-Datei auf der Xilinx-Website, die all diese Informationen enthält. Grundsätzlich listet jede Zeile den Pin-Namen, die Bank, die Funktion, die Richtung und die Pin-Nummer für eine Vielzahl von Paketen auf. Es soll in verschiedene Programme und Tabellenkalkulationen eingelesen werden, aber dafür funktioniert es gut. Es heißt "Spartan-3E FPGA ASCII Pinouts and Excel Footprints", aber hier ist der Link: xilinx.com/support/documentation/data_sheets/s3e_pin.zip