Forum: FPGA, VHDL & Co. Frage zur Anbindung von 5V-Bauteilen


von TheMason (Gast)


Lesenswert?

Hallöchen,

ich habe folgendes Problemchen (ist eig. kein Problemchen, eher eine 
unschönheit). Und zwar habe ich einen AVR und einen FPGA zusammen 
gekoppelt. Um die Portpins des FPGA's zu schützen habe ich 2.2k 
Widerstände zwischen den Port-Pins des AVR's und des FPGA's gesetzt. 
Alles schön und gut, funktioniert auch prima, allerdings lässt die 
Geschwindigkeit mit der ich Daten vom AVR->FPGA bzw. umgekehrt schaufeln 
kann noch zu wünschen übrig. Der AVR läuft mit 20Mhz und ich muß den 
Prescaler auf 16 setzen (ich nutze SPI) damit die Daten sauber ankommen. 
Nun ist mir klar das die Kapazitäten der Portpins und der Widerstand 
einen Tiefpass bilden, der mir die Frequenz nach oben hin beschneidet. 
Da mir die Berechnung aber gelinde gesagt nur Schrott liefert, stelle 
ich mal die Frage nach Erfahrungswerten.
Ich denke 2.2k ist für eine Verbindung von AVR->FPGA recht hoch bzw der 
Angstfaktor doch sehr hoch gesetzt. Aber 100 Ohm wäre rein gefühlsmäßig 
etwas wenig. Was meint ihr ? Ich möchte halt nur vermeiden das ich die 
FPGA-Ports grille bzw beschädige.
Wo wäre in etwa das Maximum an Datenübertragung bei maximal vertretbarem 
Strom an den FPGA-Pins ? Ich habe derzeit nur die möglichkeit mit dem 
Widerstandswert selbst etwas zu "spielen". Also ich kann nicht noch 
einen Pegel-Wandler oder weitere Widerstände einbauen.
Da mal generell eine Frage : Wie würde sich der maximale Strom den der 
FPGA da abkönnen muß, bzw. die maximale Frequenz an den Port-Pins 
errechnen lassen ?

von Uwe Bonnes (Gast)


Lesenswert?

Wie waere es mit einem FET BUS SWITCH WITH LEVEL SHIFTING wie dem 
SN74CBTD3861?

Zu Deinen Fragen gibt es bei Xilinx viele Application Notes.

von ohne ahnung (Gast)


Lesenswert?


von TheMason (Gast)


Lesenswert?

>Wie waere es mit einem FET BUS SWITCH WITH LEVEL SHIFTING wie dem
>SN74CBTD3861?

genau das will ich eben vermeiden ... ich würd gern das maximum aus der 
widerstandslösung herausholen ... nen 74'irgendwas (in dem fall nen 
74hct244/245 oder noch besser : 74lvc244/245) dazwischen wäre mir auch 
als lösung eingefallen .. geht aber leider nicht ... das board bietet 
keinen platz und außerdem würd ich in dem falle gerne bei den 
widerständen bleiben. aber ich weiß eben auch das da mit 2.2k halt 
einfach zuviel ist. und mir würden schon ein/zwei erfahrungswerte 
reichen ...

von ohne ahnung (Gast)


Lesenswert?

die erfahrungen die du in diesem forum zu hauf nachlesen kannst: 
spannungsteiler als levelshifter sind absoluter mist. in fast jeder 
beziehung. machs richtig, oder lass es.

von ohne ahnung (Gast)


Lesenswert?

entschuldige, ich wollte das nicht so agro formulieren. fakt ist deine 
lösung ist einfach garnicht gut. ohne wenn und aber.

von TheMason (Gast)


Lesenswert?

also für meine zwecke würde das reichen ... bin mir gerade mal den 
artikel "pegelwandler" am durchlesen. und für meine anforderungen sehe 
ich nicht so gravierende nachteile ... einzig mit dem 
strom-hin-und-herschubsen könnte problematisch werden, aber genau 
deshalb hab ich ja nach erfahrungswerten gefragt, selbst wenn es eben 
nicht die beste lösung ist. es ist die günstigste und für meine zwecke 
die praktikableste, weil :
mein fpga läuft mit 83Mhz ... der avr mit 20Mhz ... und die schnellste 
verbindung (ich plane eine parallele verbindung, habe z.z. "nur" spi) 
würde mit 5-10Mhz mehr als ausreichen. klar ist ein pegelwandler 
(74lvc-irgendwas) die elegantere lösung. aber das problem ist die dinger 
a) zu beschaffen, und b) in das vorhandene board zu integrieren, da ich 
keinen platz hab. bei einem redesign würd ichs mir vllt noch überlegen, 
aber wie gesagt ich brauche auch keine bandbreiten jenseits der 10Mhz, 
und von daher leg ich eher wert darauf das ganze so einfach wie möglich 
zu halten.
aber aus dem artikel lese ich schon das man mit 1kOhm den Strom auf etwa 
1mA begrenzen würde. also wenn ich mit 470-680 ohm die geschwindigkeit 
auf etwa 5Mhz erhöhen kann bin ich vollauf zufrieden ...


um das mal aus dem artikel zu zitieren :

>1 kOhm Vorwiderstand. Dadurch wird der Strom vom 5V Ausgang in die 3.3V 
>Versorgung durch die internen Schutzdioden auf ca. 1mA begrenzt.

und 2mA dürften die FPGA-Pins locker machen ...

>Diese Lösung ist auch relativ langsam (ca. 5MHz).

würde ausreichen da ich bei 20Mhz auf dem AVR (wenn ich eine 
parallelverbindung habe) eh noch genug takte benötige was die frequenz 
eh auf unter 5Mhz drückt...

>Ggf. kann man den Vorwiderstand auf 100 Ohm reduzieren, das erhöht dann >wieder 
die Geschwindigkeit. Aufpassen, einige ICs vertragen nur 1mA oder

na ja ... mal nich übertreiben ...

>Ausserdem muss man aufpassen, das jetzt von der 5V Seite Strom in die 3.3V 
>Versorgung eingespeist wird. Besonders in Schaltungen mit sehr niedrigem 
>Stromverbrauch kann das zum Problem werden, wenn weniger Strom verbraucht >wird 
als über die Vorwiderstände eingespeist wird.

ich habe keine stromspar-anwendung ...


welche nachteile (die ich vllt überlesen haben könnte) würden sich denn 
noch ergeben ...

ich meine um einen fpga mit einem max232 zu verbinden reichen ja auch 
nur einfache vorwiderstände. und da hab ich ja noch geringere 
übertragungsraten (also unkritisch). aber das funktioniert doch auch 
sehr gut, jedenfalls sehe ich das in vielen designs so (spartan 3 board 
z.b. und noch einige andere) ...

von ohne ahnung (Gast)


Lesenswert?

es streitet ja keiner ab dass das nicht geht. es ist halt einfach nicht 
sauber gelöst, warum hast du ja bereits zittiert. dann würde ich 
vorschlagen teste es mit den empfohlenen werten aus dem artikel. ich 
habe nur einmal zdioden für ne sdcard genuzt. war mistig. nur noch 
levelshifter.

von Frank N. (betafrank)


Lesenswert?

Probier doch mal kleine C's (<1nF) über die Widerstände zu hängen, um 
die Pin-Kapazitäten schnell umladen zu können.

von uC-Harry (Gast)


Lesenswert?

Hallo,
vielleicht ist ja der Platz für einen Spannungsteiler da. Es muss nur 
auf der Seite des 3.3V FPGA Eingangs ein Widerstand nach Masse. Eine 
Kombination aus 510 Ohm vom 5.0V µC Ausgang zum 3.3V FPGA Eingang und 
von dort mit 1 kOhm gegen Masse hat folgende Eigenschaften.
Ersten fließen 'nur' 3.3mA pro Pin gegen Masse, was der µC locker 
liefern kann.
Zweitens werden die Eingänge des FPGA nicht 'überfordert'. Es handelt 
sich nämlich um Schutz- und nicht um Nutzdioden.
Und drittens ist die Grenzfrequenz 10 MHz, sofern die Kapazität 47pF 
nicht übersteigt.

von Christian R. (supachris)


Lesenswert?

Wieso lässt du nicht den AVR auch mit 3,3V laufen? Dann bist du das 
Problem los.

von HildeK (Gast)


Lesenswert?

>Es handelt
>sich nämlich um Schutz- und nicht um Nutzdioden.
In einer Applikationsschrift zu einem Xilinx-FPGA wird vorgeschlagen, 
die Wandlung von einem 3V3-Out auf einen 2V5-In mit 68 Ohm zu machen -> 
es wird die volle Leistungsfähigkeit von 10mA der Schutzdioden 
benutzt. (Applikationsschrift zu Konfigurationsmodi, hier: die 
Anpassung einiger Konfigurationssignale, die nur mit 2V5 betrieben 
werden dürfen)

Eine Widerstandslösung ist imho voll akzeptabel. Z.B. 270 ... 330 Ohm 
für die Wandlung von 5V auf 3V3, wenn der Schutzdiodenstrom mit max. 
10mA angegeben ist, ist o.k. Und das wird bei nicht all zu langen 
Leitungen locker 10-20MHz schaffen. Wer Angst vor der Nutzung der 
Schutzdioden hat, der sollte denen normale Schottkys parallel schalten.

Der Vorschlag von uC-Harry verbessert die Angelegenheit nochmals, da man 
dann die Ersatzquelle niederohmig machen kann ohne die Schutzdioden zu 
benötigen. Auf Kosten des Ausgangsstromes der Quelle natürlich. Sein 
Beispiel würde einem 330-Ohm-Serienwiderstand entsprechen.
Und, man muss schon sehr viel falsch machen, wenn die Eingangskapazität 
47pF betragen sollte - somit ist auch die von ihm angegebene 
Grenzfrequenz eine sichere Untergrenze.

von TheMason (Gast)


Lesenswert?

erstmal danke für die tips bei diesem doch heiklen thema :-)

ich denke ich werde das einfach mal mit 620 ohm ausprobieren und schauen 
wo ich lande. ich werde die max 10mA nicht ausreizen, da zum einen ein 
schisshase bin ;-) und es mir lediglich darum geht noch ein paar mhz an 
übertragung "rauszukitzeln". mit 2.2k schaffe ich gerade mal 2.5Mhz 
(prescaler auf 8) bei dem die daten noch sauber ankommen. wenn ich 5 
oder gar 10Mhz erreiche (was bei einem prescaler von 2 dann auch das 
maximum wäre) wäre ich vollauf zufrieden, bzw mehr würde per spi eh 
nicht gehen, danach müsste ich auf parallele übertragung umsteigen.

@christian
ich kann/möchte den avr nicht auf 3.3v laufen lassen, da es mir bei dem 
avr auf maximale geschwindigkeit ankommt. ich würde diesen am liebsten 
sogar übertakten bzw einen xmega einsetzen da dieser mit 32MHz laufen 
kann. der avr hat relativ viel zu tun in dem system, von daher ist eine 
3.3v lösung nicht drin.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Sollte man Zeitkritisches nicht auf den FPGA auslagern?

von Christian R. (supachris)


Lesenswert?

Hat Atmel das immer noch nicht gelöst? 5V sind ja bei µC nun wirklich 
schon fast Steinzeit. ich dachte, die aktuellen Atmel können auch mit 
3.3V nun endlich mal schnell laufen...

von Falk B. (falk)


Lesenswert?

@  Christian R. (supachris)

>schon fast Steinzeit. ich dachte, die aktuellen Atmel können auch mit
>3.3V nun endlich mal schnell laufen...

Dann nimm einen ARM7, die laufen auch mit 3,3V recht fix.

MFG
Falk

von Christian R. (supachris)


Lesenswert?

Falk Brunner schrieb:
> @  Christian R. (supachris)
>
>>schon fast Steinzeit. ich dachte, die aktuellen Atmel können auch mit
>>3.3V nun endlich mal schnell laufen...
>
> Dann nimm einen ARM7, die laufen auch mit 3,3V recht fix.
>
> MFG
> Falk

Ist zwar langsam Off-Topic, aber ich arbeite eh nicht mit AVRs. Die 
MSP430 rennen auch bei 3,3V neuerdings mit bis zu 25MHz :)

Aber zurück zum Thema. Die sauberen Lösungen wären 3,3V für den Atmel 
oder Levelshifter, die gibts ja auch bidirektional.

von TheMason (Gast)


Lesenswert?

@läubi

>Sollte man Zeitkritisches nicht auf den FPGA auslagern?

würde in dem falle nicht gehen, da viele sachen rein softwaremäßig mit 
einander verknüpft sind und es relativ viel ist.

@falk

>Dann nimm einen ARM7, die laufen auch mit 3,3V recht fix.

das ist der nächste bzw. übernächste schritt.

von uC-Harry (Gast)


Lesenswert?

Hallo,
die neueren Atmel AVR laufen bei 3.3V 10MHz. Die ATxmega laufen bei 3.3V 
mit 32MHz, haben aber eine weitgehend identische 8 bit CPU.
Wenn noch mehr Leistung gebraucht wird empfehle ich einen AVR32, die mit 
3.3V I/O-Spannung, 60MHz rennen und über Register zu 32 bit verfügen.
In allen Fällen hat sich jedenfalls der Pegelwandler, welcher Form auch 
immer, erübrigt.

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.