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.
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.
Tony Stewart EE75
bFig8
bFig8
Tut
bFig8