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