mikrocontroller.net

Forum: FPGA, VHDL & Co. Pull-Up's bei bidirektionalen Ports nötig?


Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz:
Du brauchst keine Pullups.
Lass die Signale floaten, da passiert nix.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gegenfrage:
Warum sollten die Transistoren denn durchbrennen, wenn weder Spannung 
anliegt, noch Strom fließt?

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, hab deinen letzten Beitrag noch nicht gelesen als ich meinen
abgeschickt habe...
Also hast du in der Praxis noch keine Probleme damit gehabt?

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die sind standardmäßig unter ISE WebPACK auf Pull-Down eingestellt.
Zu finden unter: [Generate Programming File]->Rechtsklick->Properties
->Configuration Options->Unused IOB Pins...

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hast schon Recht. Das selbe hab ich mir auch schon gedacht.
Aber ein ungutes Gefühl bleibt...

Autor: Schrotty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber ein ungutes Gefühl bleibt...
Ach, so schnell stirbt dein FPGA nicht ;-)
Nur Mut! ;-)

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den Coolrunner, Spartan und Virtex Chips gibt es für die IOs noch
sog "Keeper" (Bus holder), diese Konstruktion verhindert
das floaten von Tri-State-IOs. Sieht im UCF file dann etwa so aus:

NET "xdata_io<0>" LOC = D3 | KEEPER;

Wird z.B. in diesem Xilinx Guide kurz mal erwähnt:
http://www.xilinx.com/itp/xilinx82j/help/iseguide/...

und die Xilinx Aplication-Note "xapp784" ist auch interessant
http://www.xilinx.com/support/documentation/applic...
ist zwar für CPLD, gilt auch für die FPGA, denke ich.

Noch ne App-Note zum Thema IOs:
http://www.xilinx.com/support/documentation/applic...

Autor: berndl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.