www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Stratix: Opendrain


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Wenn ich in Quartus einen Opendrain-Buffer (OPNDRN) vor einen Ausagang
setze:

Ist der Ausgang meines Stratix-FPGAs dann ein Open-Drain
(Open-Collector??) Ausgang?
Ich bräuchte also dann einen externen Pullup?

Ich will mehrere Stratix-Boards mit einem Bus vernetzen. Da das kein
Master/Slave-Bus ist, kann es sein, dass zwei gleichzeitig senden
wollen. Mit OC wäre das kein Problem.

Autor: seek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jan,

Ich wiess nicht genau was die OPNDRN (Komponente oder Einstellung) ist.
Auf jeden Fall ist ein Open-Drain in Stratix möglich, es ist eigentlich
nichts anderes als ein Tri-State: MyPin <= '0' when MySig = '0'
else 'Z'. Externe Pullups braucht es auf jeden fall, denn der interne
Pullup ist mit seinen 25 kohm zu hochohmig.

Kannst du mehr Infomationen zu deinem Vorhaben geben (Geschwindigkeit,
Leitungslänge und Lasten)?

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sollen sechs Nios II DevKits mit Stratix an einen gemeinsamen Bus
angeschlossen werden.

Der Bus (38 I/O insgesamt) wird bestehen aus einen Flachkabel von jedem
Board zu einer zentralen Verteilerplatine.

Da jede Einheit (jeder FPGA) autonom agiert, ist ein Master/Slave-Bus
unerwünscht.
Da mehrere FPGAs gleichzeitig senden können, kann es zu Kurzschlüssen
kommen. Opendrain wäre da ideal. Man müsste nur eine
Collision-Detection einbauen.

Ich kanns leider momentan nicht ausprobieren:
Wenn ich vor den Bidir-Pin einen OD-Buffer setze, in den Buffer ein
High reinkommt, dann müsste der Portpin auf Z stehen, richtig?
Muss ich bei den Pin-Assignments dann irgendeine Option setzen und
welchen Logiktyp? LVTTL?

Autor: seek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du gibst deinem Pin in der Portbeschreibung den Typ inout, dann
funktioniert das schon.

entity ...
  port (MyPin : inout std_logic)
architecture ...
  MyPin <= '0' when MySig = '0' else 'Z';

Optionen muss man keine setzten, ausser der IO-Sandard auf ein "single
endet" Typ (LVTTL, LVCMOS).

Ich wiess zwar immer noch nicht wie schnell das arbeitet, aber bei 6
Lasten (kapazitiv) und das ganze noch über Flachkabel, wird es nicht
funktionieren. Überlege mal wie lange es dauern wird, bis der Pullup
das Signal von 0 auf 1 ziehen kann und wie Störungsanfällig es ist.

Wenn du sowiso Verteilerplatine machen musst, kannst du da doch ein
CPLD drauf machen, das den Zugriff auf den Bus steuert. Jedes FPGA das
den Bus benutzen will meldet das beim CPLD über eine Leitung und wartet
dann über eine zweite Leitung auf die Bestätigung. Somit kannst du dir
auch die Collision-Detection sparen.

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.