JTAG-Programmierer mit Zedboard - Probleme mit der Signalintegrität?

Ich versuche, meinen eigenen JTAG-Programmierer mit dem Zedboard zu bauen, aber ich stecke mit Hardwareproblemen fest.

Für die Zedboard-Seite verwende ich die Pins XADC-GIO0, XADC-GIO1, XADC-GIO2 und XADC-GIO3 als TCK, TDI, TDO und TMS. Ich habe diese Pins als LVCMOS25 festgelegt, da der JTAG meiner Zielplatine eine VREF von 2,5 V hat. Auf meinem Zedboard habe ich die Jumper-Einstellung für den Vadj bei 2,5 V verwendet.

Beim Programmieren der Zielplatine mit dem Zedboard verbinde ich einfach die 4 JTAG-Pins mit Drähten vom Zedboard mit der Zielplatine und ziehe TDO mit einem Widerstand zum VREF der Zielplatine hoch. Ich habe keine Pufferchips oder Vorwiderstandsterminierung oder Entkopplungskondensatoren zur Masse für die JTAG-Pins. Ich dachte, dass TCK 1 MHz beträgt und nicht wirklich so schnell ist, dass Probleme mit der Signalintegrität auftreten können?

Beim Ausgeben der JTAG-Befehle an das Zielboard kann ich die Geräte-ID jedoch nicht korrekt zurücklesen, irgendwie stimmt die TDO-Ausgabe einfach nicht.

Ich habe die Ausgabe vom Zedboard an die Zielplatine mehrmals überprüft und bin mir sicher, dass sie die richtigen Bits an die Zielplatine ausgeben. Ich habe auch die Setup-and-Hold-Zeiten des TCK wrt TDI überprüft und da ist auch nichts falsch. Das Zedboard und das Zielboard werden separat mit eigenen Netzteilen mit Strom versorgt, aber ich habe einige der Erdungsstifte auf beiden Boards miteinander verbunden, um eine gemeinsame Masse zu haben. (Ein weiterer Noob-Fehler oder ist das normal?) Das FPGA des Zielboards ist ebenfalls ein Xilinx-FPGA.

Wenn es sich wirklich um Probleme mit der Signalintegrität handelt, kann mir jemand sagen, wie ich das lösen kann?

Vielen Dank im Voraus.

Update 20171004 1: Ok, also bin ich auf das Problem gestoßen, aber ich habe keine Ahnung, wie ich es beheben kann. Anscheinend scheint das Problem bei TCK zu liegen. Es ist das gleiche Setup, aber ich habe den Pullup-Widerstand von TDO entfernt. Wenn ich jetzt eine gelesene Geräte-ID ausgebe und TCK (nicht TDO!) mit einem Oszilloskop prüfe, meldet das Zedboard FPGA die richtige Geräte-ID. Wenn ich die Oszilloskopsonde entferne, ist die Geräte-ID wieder falsch. Dies ist nicht intermittierend; das Anbringen bzw. Entfernen der Oszilloskopsonde auf/von dem TCK-Pin führt dazu, dass das TDO richtig und falsch gelesen wird. Irgendwelche Ideen, wie ich das lösen sollte?

Die Zedboard-FPGA-Pins sind LVCMOS25 mit Antrieb bei 16 mA.

Update 20171004 2: Ok, ich habe einen Pull-up-Widerstand auf TCK hinzugefügt (kein Pull-up-Widerstand auf TDO) und die Geräte-ID wird jedes Mal korrekt gelesen. Ich habe das Ziel-FPGA immer noch nicht erfolgreich konfiguriert, aber ich denke, zumindest der Signalintegritätsteil scheint vorerst ein wenig gezähmt zu sein.

Update 20171005: Ok, ich habe das Problem endlich gefunden. Es stellte sich heraus, dass mein TMS-Pin XADC-GIO3 (Pin J15) zugewiesen war und dieser Pin das Problem war. Jeder andere Pin H15, R15 (bzw. TCK, TDI) hat eine Vpp von 2,5 V, während J15 nur ~ 1 Punkt Volt hat. Ich habe dies durch Austauschen mit TDO (K15) in einen Eingangspin umgewandelt und alles ist gut gelaufen! Kein Bedarf an verdrillten Paaren oder Terminierungs- oder Pull-up-Widerständen bei irgendeinem Signal – TMS, TCK, TDI oder TDO. Ich konnte auch endlich das Zielboard mit meinem Zedboard JTAG-Programmierer programmieren.

wahrscheinlich, wie können wir Ihr Layout und Ihre Signale sehen? Hast du Twisted-Pair verwendet?
Die einzige Verbindung zwischen dem Zedboard und der Zielplatine sind die 4 JTAG-Pins (wobei das TDO auf die VREF der Zielplatine hochgezogen ist). Ich verwende nur 4 einzelne Drähte, um die JTAG-Pins zwischen den beiden Platinen zu verbinden. Ein weiterer Draht verbindet die Massestifte der beiden Platinen miteinander, um eine gemeinsame Masse zu bilden. Verdrillte Paare wie beim Verdrillen der 4 Drähte miteinander?
Ich frage mich, ob ich die VREF von der Zielplatine richtig verwende?
Wie lang ist dein Kabel? Wie schnell sind die Anstiegszeiten?
Etwa 20 cm lang. Ich habe die Anstiegszeiten auf der Seite des Zielplatinenanschlusses nicht gemessen. Auf der Zedboard-Seite sind es wohl die normalen Xilinx ZC7020 IO-Anstiegszeiten?

Antworten (1)

Update 20171005: Ok, ich habe das Problem endlich gefunden. Es stellte sich heraus, dass mein TMS-Pin XADC-GIO3 (Pin J15) zugewiesen war und dieser Pin das Problem war. Jeder andere Pin H15, R15 (bzw. TCK, TDI) hat eine Vpp von 2,5 V, während J15 nur ~ 1 Punkt Volt hat. Ich habe dies durch Austauschen mit TDO (K15) in einen Eingangspin umgewandelt und alles ist gut gelaufen! Kein Bedarf an verdrillten Paaren oder Terminierungs- oder Pull-up-Widerständen bei irgendeinem Signal – TMS, TCK, TDI oder TDO. Ich konnte auch endlich das Zielboard mit meinem Zedboard JTAG-Programmierer programmieren.