Forum: FPGA, VHDL & Co. Kommunikation: FPGA <-> Mikrocontroller


von Daniel R. (dan066)


Lesenswert?

Ich würde gerne einen FPGA mit einem mikrocontroller kommunizieren 
lassen. Dabei will ich die pull-up Widerstände der FPGA I/O Blöcke 
benutzen. Mein Problem sind die spannungsunterschiede. Wenn 
beispielsweise die Ausgangsspannung des MCU größer ist als die des FPGA 
kann es doch passieren dass ein Strom durch den pull-up Widerstand in 
die spannungsquelle des FPGAs hineinfließt oder nicht? Wie bekomme ich 
die spannungsunterschiede weg sodass kein Gerät überlastet wird?

von Daniel (Gast)


Lesenswert?

Daniel R. schrieb:
> Wie bekomme ich
> die spannungsunterschiede weg sodass kein Gerät überlastet wird?
Mit einem Pegelwandler. Über welche Spannungen reden wir hier 
eigentlich?

> Ich würde gerne einen FPGA mit einem mikrocontroller kommunizieren
> lassen.
Ich würde dafür UART oder SPI verwenden. Da braucht man keine Pull-Ups.

Daniel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Daniel R. schrieb:
> Wenn beispielsweise die Ausgangsspannung des MCU größer ist als die des
> FPGA
Du darfst dann natürlich beim uC keinen High-Pegel ausgeben. Sondern 
eben nur L und Z. L ist klar, Z kommt heraus, wenn der uC Pin auf 
Eingang geschaltet wird.

BTW: für eine anständig schnelle Kommunikation ist der interne Pullup 
viel zu hochohmig...

von uwe (Gast)


Lesenswert?

Die IO-Blöcke beim FPGA können mit unterschiedlichen Spannungen 
betrieben werden. Guck doch mal in deinem Schaltplan nach ob dies nicht 
möglich ist. Ansonsten halt nen Pegelwandler.

von Daniel R. (dan066)


Lesenswert?

Danke für die Antworten.
Mein Plan sieht folgendermaßen aus:
Ich habe eine MCU, die über I²C mit einer anderen kommuniziert. Mein 
FPGA sitzt dazwischen und dient dazu das Signal in beide Richtungen 
(leicht modifiziert) durchzuleiten. Ich lese und schreibe also von/auf 
beide Leitungen.
MCU1 <-> FPGA <-> MCU2

Ich denke es gibt da zwei Möglichkeiten zur Kontrolle der Spannungen für 
die Kommunikation:
Entweder müssen die MCUs und der FPGA an der selben Spannungsquelle 
hängen (also die FPGA output driver blöcke).
Oder es müssen Pegelwandler dazwischen (sofern die Betriebsspannung der 
MCUs außerhalb des erlaubten Bereichs des FPGA liegt, denn bei 3.3V ist 
beim FPGA schluss).

von J. S. (engineer) Benutzerseite


Lesenswert?

Was liefert denn Dein uC an Spannung am I2C-Interface? Die Daten zieht 
der sicher nur auf 0 und geht ansonsten auf TriState. Du brauchst nur 
noch eine 3,3V kompatible Clk-Leitung. Wenn der uC clock streching kann, 
dann darf er diese auch nicht aktiv treiben und Du bist fein raus. Du 
musst nur entsprechend pullen.

Wenn der uC nur Master ist, ist das gar kein Problem, denn Du kannst den 
Eingang mit einer Schaltung aus R+Z-Diode auf 3,3V limitieren. Wenn der 
FPGA auch Master sein soll, dann musst Du die Spannung eben auf 
uC-Niveau hochpullen. Das geht bis 5V recht gut, Du musst eben nur die 
Schaltung anpassen, dass beim Laststrom durch die Z-diode bei aktivem uC 
selbiger nicht zu sehr belastet wird. Die Anordnung wird halt nur 
entsprechend langsam und limitiert die mögliche Taktfrequenz. Ansonsten 
Pegelwandlung mit einem Transistor.

Wenn Du über grössere Distanzen gehen willst, brauchts Du eh einen 
Leitungstreiber/Buffer und die lösen Dir Dein Problem.

: Bearbeitet durch User
von Johann (Gast)


Lesenswert?

Wenn Du einen XMEGA von Atmel nimmst dann kannst Du als VCC 3,3V 
verwenden. Auch die FPGA Bank vom FPGA kann dann mit 3,3V versorgt 
werden. Somit hast Du dann CMOS 3,3V zwischen dem µC und dem FPGA.

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.