Guten Abend,
Ich hätte da eine Frage an die FPGA-Profis...
Der FPGA auf meinem Board ist mit einem Microcontroller zwecks
Konfiguration und Kommunikation verbunden. Der Microcontroller
hat wie üblich, einen bidirektionalen Datenbus.
Aus dem Datenblatt des Microcontrollers:
Data bus:
This bi-directional bus is highimpedance when inactive, input for bus
reads, and output for bus writes. The data bus is also used to transfer
data directly to and from internal EZ-USB FIFOs under control of the
FRD# and FWR# strobes. D0-D7 are active only for external bus accesses,
and are driven low in suspend.
Also ist der Datenbus, wenn er nicht aktiv ist, im Tristate...
Da in meinem FPGA-Design wie üblich, die bidirektionalen Pins, die mit
dem oben genannten Datenbus verbunden sind, wenn nicht gerade OE aktiv
ist, auch im Tristate verweilen, dann floaten doch die inout-Pins meines
FPGA's, oder etwa nicht?
Kann ich damit mein Chip, ein Spartan-II beschädigen?
Soll ich Pull-UP-Wiederstände aktivieren, komisch nur dass im ucf-File
eines Beispiel-Designs nichts davon zu sehen ist???
Bitte um Aufklärung, Vielen Dank
und weißt du auch warum da nix passiert? - Hab mal gehört dass
CMOS-Transistoren da sogar durchbrennen können!? Haben die da irgendeine
Schutzschaltung?
Aber schonmal Danke für die Antwort!
Theoretisch wäre sowas denkbar, wenn du mittels eine FETS einen großen
Strom schalten willst und an diesem Transistor das Gate floaten lässt.
Dann könnte es theoretisch passieren, dass der Transistor teilweise
aufgesteuert ist und somit Strom ein Strom fließt und gleichzeitig ein
Drain-Source-Spannung abfällt und das Produkt aus beiden könnte Ptot
überschreiten. Was es nicht tun würde, wenn der Transistor sperrt (UDS =
groß, aber ID = 0) oder voll aufgestuert ist (UDS = sehr klein und ID =
groß)
Aber in deinem Fall lässt du ja über den Transistor im innern des FPGA
nahezu keinen Strom fließen (nur der Gatestrom für den nachfolgenden
FET) und der ist meines erachtens völlig harmlos.
Naja, weil dabei hohe Querströme auftreten können...
Siehe: http://www.allaboutcircuits.com/vol_4/chpt_3/7.html
Dort wird gesagt: For this reason, it is inadvisable to allow a CMOS
logic gate input to float under any circumstances.
Mit den Querströmen hast du theoretisch schon recht, dass sowas
auftreten könnte. Aber in der Praxis konnte ich das noch nicht
beobachten.
Dazu müsste man aber genau wissen, wie die Ports auf dem Silizium
aufgebaut sind.
Also wenn du pullen willst, dann würde ich, wenn es geht nur "weak"
pullen.
Aber wie gesagt: Ich hatte noch nie ein Problem damit.
Wie steht es denn mit unbenutzen Pins? Machst du was mit denen? oder
lässt die einfach offen?
Die sind standardmäßig unter ISE WebPACK auf Pull-Down eingestellt.
Zu finden unter: [Generate Programming File]->Rechtsklick->Properties
->Configuration Options->Unused IOB Pins...
Ergänzung:
Wenn dies ein Problem wäre, dann würde das ja überall auftreten, wo es
Datenbusse gibt. z.B. zwischen µC und RAM oder Flash oder ...
Es müsste ja dann gerade so sein, dass sich die ganze Welt drauf
geeinigt hat, dass im Tristate-Fall immer ein interner Pullup oder
Pulldown verwendet wird. Aber eben nur einer der beiden.
Würde z.B. dein RAM einen Pullup verwenden und der µC einen Pulldown,
dann wüsstest du erst wieder nicht, welcher Pegel sich aufgrund des sich
bildenden Spannungsteilers auf der Leitung einstellt.
Und ich habe noch nicht gehört, dass es eine weltweite Festlegung gäbe,
dass Tristate-Ports immer mit einen bestimmten Pullwiderstand versehen
sind.
Und externe Pullups an Datenleitungen sieht man zwar ab und an, aber das
macht so gut wie niemand (mehr)
Ich denke, dass die Ports einfach so kunstruiert sind, dass da nix
passieren kann. Aber auf jeden Fall eine Interessante Frage, wenn man
mal länger drüber nachdenkt :-)
Hi,
das Problem kannst du denke ich fuer jedes asynchrone bidirektionale
Bussystem abhaken. Was passiert denn da:
Asynchron getaktete Teilnehmer am Bus gehen auf High-Z. Die Folge ist,
dass die Busleitungen irgendwie zwischen 0 und 1 rumhaengen oder mehr
oder weniger schnell nach 0 oder 1 gezogen werden (pullup oder
pulldown). Das wird in der Empfaengerlogik immer zu setup/hold
Violations fuehren. So robust muss eine HW heute einfach sein. Und
selbst wenn Metastabilitaet auftritt, dann muss die einfach schneller
'weg' sein als z.B. das externe I/F mit seinen R/W Signalen bzgl. der
Daten braucht.
Allerdings sollte man sich bei solchen Bussen eben auch immer im Klaren
sein was man da tut. Dann laeuft es naemlich absolut zuverlaessig...