Forum: FPGA, VHDL & Co. Stratix: Opendrain


von Jan (Gast)


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.

von seek (Gast)


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)?

von Jan (Gast)


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?

von seek (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.