Stratix: Opendrain

Gast #252634
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.
Gast #252635
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)?
Gast #252636
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?
Gast #252637
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren