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 ?
Wie waere es mit einem FET BUS SWITCH WITH LEVEL SHIFTING wie dem SN74CBTD3861? Zu Deinen Fragen gibt es bei Xilinx viele Application Notes.
>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 ...
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.
entschuldige, ich wollte das nicht so agro formulieren. fakt ist deine lösung ist einfach garnicht gut. ohne wenn und aber.
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) ...
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.
Probier doch mal kleine C's (<1nF) über die Widerstände zu hängen, um die Pin-Kapazitäten schnell umladen zu können.
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.
>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.
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.
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...
@ 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
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.
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.