Forum: FPGA, VHDL & Co. Nutzung bidirektionaler Pins


von Tobias W. (eagle2010)


Lesenswert?

Hallo,

für ein Projekt möchte ich einen 1x16-Zeichen-Punktmatrix-Display 
(HD44100-Controller) über ein FPGA (Spartan 3E) ansteuern.
Dafür möchte ich nach jeder Anweisung an das Display dessen Busy-Flag 
abfragen.
Daher habe ich die 8 Daten-Signale als "inout" definiert. Diese 8 Pins 
werden über einen Pegelwandler (SN74LVC4245A) mit dem Display verbunden.
Nun muss ja, denke ich mal, der Ausgang am FPGA hochohmig geschaltet 
werden, bevor das Display seine Daten auf den Bus legt. Aber wie 
funktioniert das? Wenn ich data <= "ZZZZZZZZ" setze, kann ich die Daten 
doch nicht mehr abfragen, oder? Was würde überhaupt passieren, wenn auf 
einer Leitung noch ein High-Signal vom FPGA anliegt, zugleich aber der 
Ausgang vom Pegelwandler auf Low geht, kann dabei das FPGA Schaden 
nehmen?
Sorry, wenn diese Fragen vielleicht etwas trivial sind, ich habe aber 
nach 3 Stunden googlen keine wirkliche Lösung gefunden - die 
Display-Ansteuerungen, die ich gefunden habe, schreiben immer nur aufs 
Display.

Gruß
Tobias

von Manuel K. (manuel1139)


Lesenswert?

Schau dir mal an wie z.B. SRAM angesteuert wird.

Wenn du HI/LO an Ausgängen hast gibt das einen Kurzschluss und zumindest 
der IOB dürfte defekt sein.

von Stephan (Gast)


Lesenswert?

> Wenn ich data <= "ZZZZZZZZ" setze, kann ich die Daten
> doch nicht mehr abfragen, oder?

Doch das kannst du.

> Was würde überhaupt passieren, wenn auf einer Leitung noch ein High-Signal
> vom FPGA anliegt, zugleich aber der Ausgang vom Pegelwandler auf Low geht,
> kann dabei das FPGA Schaden nehmen?

Ja, er kann, wahrscheinlich hast du aber Glück und es passiert 
nichts(der Strom vom FPGA ist begrenzt). Also keine allzugrosse Angst.

Mit einem Testbench (das Beste an VHDL!) kannst du alles gut im 
Simulator durchtesten damit es dann ohne Probleme im FPGA läuft.

von Tobias W. (eagle2010)


Lesenswert?

Ok, also ich mache eine nebenläufige Anweisung:
disp_d <= data when rw = '0' else "ZZZZZZZZ";
und es kann nichts passieren?

von guest (Gast)


Lesenswert?

Dem FPGA passiert bei tristate Z ohnehin nichts mehr. Die Frage ist nur, 
wie verhält sich dein Pegelwandler? ist der auch bidirektional?

von Tobias W. (eagle2010)


Lesenswert?

Der Pegelwandler ist bidirektional (Datenblatt: 
http://www.farnell.com/datasheets/62872.pdf). Der Eingang "DIR" des 
Wandlers ist ebenfalls folgendermaßen an das Signal "rw" gekoppelt:
pw_dir <= rw;
Außerdem hätte ich noch die Möglichkeit, den Pegelwandler hochohmig zu 
schalten, was aber eigentlich nicht nötig ist, oder?

von Falk B. (falk)


Lesenswert?

@ Tobias W. (eagle2010)

>Display-Ansteuerungen, die ich gefunden habe, schreiben immer nur aufs
>Display.

Und? Das reicht doch. Machen 99% aller Anwender so und das sehr 
erfolgreich.

MFG
Falk

von Tobias W. (eagle2010)


Lesenswert?

Falk Brunner wrote:
> @ Tobias W. (eagle2010)
>
>>Display-Ansteuerungen, die ich gefunden habe, schreiben immer nur aufs
>>Display.
>
> Und? Das reicht doch. Machen 99% aller Anwender so und das sehr
> erfolgreich.

Ok, möglicherweise kann ich mir das Abfragen des Busy-Flags sparen, aber 
es wäre trotzdem interessant zu wissen, wie es funktioniert.

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.