Forum: FPGA, VHDL & Co. Frage zu MachXOLF an TXB0104


von Andre F (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

in meinem Projekt möchte ich einen FPGA bzw. dessen Ports (3,3V) 
(MachXOLF aus dem Starterkit von Lattice) mit verschiedenen I/O Signalen 
aus einem anderen (5V) IC verbinden.

Dabei bin ich darauf angewiesen das ich die I/O Richtung wechseln kann. 
Am besten automatisch, weswegen ich mich für den TXB0104 als 
Pegelwandler entschieden habe.

Über die interne Beschaltung der I/O Ports des anderen IC's habe ich 
leider keine weiteren Informationen.

Zu Anfang hatte ich den I/O Wandler einfach verbunden und gehofft das 
alles so klappt, leider war dem nicht so.

Nun habe ich die Schaltung deutlich reduziert und mir die Signale 
nochmal auf dem Oszilloskop angeschaut.

Das "Programm" im FPGA macht (zu Testzwecken) aktuell nichts anderes als 
eine I/O Leitung zu lesen und den Zustand auf einer separaten LED 
auszugeben.

Zur Analyse habe ich mir nun ein "Takt"-Signal aus dem externen 5V IC 
angeschaut und Testweise verschiedene Pull-Up/Down Wiederstände auf 
seiten des FPGA an den I/O Buffer gebunden.


In den angehängten Bildern sieht man nun die Signale die Beim FPGA 
ankommen. Leider sehen alle nicht besonders gut aus und keines der 
Signale kommt an die 3,3V rann, oder ähnelt der eigentlich gewollten 
Wellenform.

Hat vielleicht jemand einen Tipp woran es liegen könnte oder was ich als 
nächstes tun sollte?

Anbei ein Bild mit (von Oben nach Unten):
- 5V Ausgangssignal vom externen IC
- Signal zwischen FPGA und TXB0104 ohne Pull Up/Down
- Signal zwischen FPGA und TXB0104 mit internem Pull Down
- Signal zwischen FPGA und TXB0104 mit internem Pull Up

von Gerd E. (robberknight)


Lesenswert?

über was für Geschwindigkeiten reden wir hier?

Sind alle Oszi-Bilder mit der selben Zeitbasis?

von Andre F (Gast)


Lesenswert?

Das Signal hat etwa 3,5 MHz.
Die Basis auf den Bildern ist meinem Wissen nach gleich.
(bei dem letzten bin ich mir nicht ganz sicher)
Weiterhin sind es auf der Y Achse 1V pro Rastereinheit.

Hier fällt auf das es auf dem ersten bild ~5V sind, auf den anderen 
jedoch nicht annähernd 3,3V.

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


Angehängte Dateien:

Lesenswert?

Andre F schrieb:
> Zur Analyse habe ich mir nun ein "Takt"-Signal aus dem externen 5V IC
> angeschaut und Testweise verschiedene Pull-Up/Down Wiederstände auf
> seiten des FPGA an den I/O Buffer gebunden.
Mal davon abgesehen, dass es keine "Wiederstände" gibt: hast hast im 
Datenblatt des Bausteins auf der Seite 3 im Bild 5 die Fußnote D 
gesehen?

> Dabei bin ich darauf angewiesen das ich die I/O Richtung wechseln kann.
> Am besten automatisch
Warum "automatisch"? Weißt du denn nicht, zu welchem Zeitpunkt die 
Signale in welche Richtung gehen? Wie sicherst du dich gegen einen 
Buskonflikt ab oder wie löst du einen Buskonflikt auf?

von Andre F (Gast)


Lesenswert?

Lothar M. schrieb:
> Andre F schrieb:
>> Zur Analyse habe ich mir nun ein "Takt"-Signal aus dem externen 5V IC
>> angeschaut und Testweise verschiedene Pull-Up/Down Wiederstände auf
>> seiten des FPGA an den I/O Buffer gebunden.
> Mal davon abgesehen, dass es keine "Wiederstände" gibt: hast hast im
> Datenblatt des Bausteins auf der Seite 3 im Bild 5 die Fußnote D
> gesehen?

Die Fußnote hatte ich zwar nicht dort gesehen, jedoch im Fließtext des 
Datenblattes etwas weiter vorne. Testweise hatte ich einen 
entsprechenden Widerstand manuell eingebaut, bevor ich die internen des 
FPGA verwendet hatte.
Ein "hocher" Wert - also entsprechend dem Datenblatt" größer als 50k Ohm 
- hatte auf das Signal keine/so gut wie keine Außwirkung. Ein Test mit 
einem etwas kleinerem Widerstand entspracht etwa dem auf dem Bild mit 
internem Pull Up bzw. Pull Down.
Also vermutlich etwas besser, jedoch ncoh weit vom eigentlichen 
Signalverlauf entfernt.

>> Dabei bin ich darauf angewiesen das ich die I/O Richtung wechseln kann.
>> Am besten automatisch
> Warum "automatisch"? Weißt du denn nicht, zu welchem Zeitpunkt die
> Signale in welche Richtung gehen? Wie sicherst du dich gegen einen
> Buskonflikt ab oder wie löst du einen Buskonflikt auf?

Theoretisch weiß ich das schon, bzw. kann es eventuell experimentiell 
ermitteln.

Vielleicht ein paar Worte zum Hintergrund. Es geht um die Kommunikation 
zwischen einem Super Nintendo CIC Chip und dem Pendant aus der 
Cartridge.

Etwas vereinfacht gesagt funktioniert die Kommunikation so:

Der IC-SNES ist mit IC-Cart über zwei I/O Leitungen P0 und P1 über Kreuz 
verbunden.
Zu Anfang wird über die Leitungen ein paar Bits ausgetauscht, dann 
wechselt die I/O Richtung von P0 und P1 und die beiden IC's reden quasi 
in umgekerter Richtung miteinander.

Hierauf habe ich leider keinen Einfluss. Ich vermute mal das diese 
Designentscheidung getroffen wurde um es anderen schwieriger zu machen 
mit den IC's zu kommunizieren.

Meine Kenntnisse bzgl. Design/Entwicklung für FPGA's ist aktuell noch 
recht beschränkt. Deswegen bestand meine Idee darin auf FPGA-Seite einen 
In/Out Port zu verwenden und diesen über einen Pegelwandler mit dem 
anderen IC auf SNES Seite zu verbinden.

Hierbei muss ich zwar immer noch im FPGA darauf achten zum richtigen 
Moment zwischen Input und Output zu wechseln (in meinem Fall wohl High-Z 
und 0/1) jedoch habe ich dann nicht die Gehfahr Hardware zu beschädigen, 
wenn ich bei der Kommunikation etwas falsch mache.

Angenommen ich würde beispielsweise eine 1 (3,3V) ausgeben und die 
andere Seite fungiert gerade auch als Ausgang mit 0 (0V) dann hätte ich 
ja quasi einen Kurzschluss der ggf. eine Seite beschädigen könnte.

Oder übersehe ich da etwas?

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


Lesenswert?

Andre F schrieb:
> Meine Kenntnisse bzgl. Design/Entwicklung für FPGA's ist aktuell noch
> recht beschränkt. Deswegen bestand meine Idee darin auf FPGA-Seite einen
> In/Out Port zu verwenden und diesen über einen Pegelwandler mit dem
> anderen IC auf SNES Seite zu verbinden.
Mit welchem Ziel? Willst du dich "dazwischenklemmen" und die Daten 
manipulieren? Oder willst du eine Cartridge basteln? Oder willst du nur 
mithorchen?

von Andre F (Gast)


Lesenswert?

Lothar M. schrieb:
> Andre F schrieb:
>> Meine Kenntnisse bzgl. Design/Entwicklung für FPGA's ist aktuell noch
>> recht beschränkt. Deswegen bestand meine Idee darin auf FPGA-Seite einen
>> In/Out Port zu verwenden und diesen über einen Pegelwandler mit dem
>> anderen IC auf SNES Seite zu verbinden.
> Mit welchem Ziel? Willst du dich "dazwischenklemmen" und die Daten
> manipulieren? Oder willst du eine Cartridge basteln? Oder willst du nur
> mithorchen?
Ich möchte den Chip auf der Cartridge durch meine eigene Lösung 
ersetzen.

Eigentlich wollte ich hier jedoch garnicht so genau in die Ziele meines 
Projektes abtauchen. Es ging mit mehr darum zu ermitteln warum die 
Kummunikation so kaputt aussehen könnte.

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


Lesenswert?

Andre F schrieb:
> Ich möchte den Chip auf der Cartridge durch meine eigene Lösung
> ersetzen.
Dann musst du doch sowieso wissen, wann du umschalten 
musst/kannst/darfst. Und dann kannst du auch einen normalen 
umschaltbaren Treiber aus der Liga SN74LVCC4245A nehmen...

Wenn das ganze eine Art Mulstimaster/I²C-Bus ist, dann nimmst du diesen 
allseits Schaltungstrick zur Pegelwandlung eines I²C Busses:
http://www.nxp.com/documents/application_note/AN10441.pdf

von Andre F (Gast)


Lesenswert?

Lothar M. schrieb:
> Andre F schrieb:
>> Ich möchte den Chip auf der Cartridge durch meine eigene Lösung
>> ersetzen.
> Dann musst du doch sowieso wissen, wann du umschalten
> musst/kannst/darfst.
Richtig, aber mit dem TXB0104 Schaltung war ich mir sicher das ich im 
Zweifelsfall nichts kaputt machen kann. Das schlimmste was passieren 
kann war in meinem Gedankengang das nichts passiert.

> Und dann kannst du auch einen normalen
> umschaltbaren Treiber aus der Liga SN74LVCC4245A nehmen...

Was würde denn passieren wenn beide Seiten der Schaltung als Ausgang 
konfiguriert sind und auf einer Seite 5V anliegen und auf der anderen 
0V?

Ich mchte vermeiden den Super Nintendo zu grillen. (Anhand des 
Datenblattes bin ich mir nicht sicher was genau passieren würde)

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


Lesenswert?

Andre F schrieb:
> Was würde denn passieren wenn beide Seiten der Schaltung als Ausgang
> konfiguriert sind und auf einer Seite 5V anliegen und auf der anderen
> 0V?
Das wäre.eine Buskollision.Und passieren würde mit an Wahrscheinlichkeit 
grenzender Sicherheit gar nichts. Ich habe solche Sachen schon mit 
32Bits auf Dauer gemacht,  da war nach 2 Wochen immer noch nichts 
kaputt.


Und es passiert schon gleich überhaupt gar nichts, wenn du während der 
Entwicklung einfach 100R Serienwiderstände in die Busleitungen vom 
Treiber zur Konsole bastelst.

: Bearbeitet durch Moderator
von Sigi (Gast)


Lesenswert?

Andre F schrieb:
> Was würde denn passieren wenn beide Seiten der Schaltung als Ausgang
> konfiguriert sind und auf einer Seite 5V anliegen und auf der anderen
> 0V?

Bei I2C wird das Problem auf der FPGA-Seite
z.B. dadurch gelöst, dass statt einer '1'
am Ausgang ein 'Z' den Ausgang in den Hi-Z
Zustand versetzt. Per Pullup wird dann eine
'1' generiert.

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.