FPGA-Jtag-Anbindung an Benutzerlogik

Nach einigem Lesen von Grundlagen zu jtag scheint es ein raffiniertes Mittel zu sein, um ein FPGA-Logikdesign auf konsistente und nachhaltige Weise zu testen.

Nehmen wir altera max 10 als Beispiel. Ich habe dieses Benutzerhandbuch für MAX 10 JTAG Boundary-Scan-Tests gelesen . Meine Lesung ist, dass der jtag-Tester (höchstwahrscheinlich ein Host-PC) USER0- oder USER1-Anweisungen sendet, um auf die Benutzerlogik zugreifen zu können.

Fragen sind:

  • Wie implementieren Sie eine Logik im Benutzerlogikdesign, um die Befehle und Parameter abzufangen und einige Ergebnisse zurückzugeben? Beispiele?

  • Wie senden Sie diese Befehle auf dem Host, vorzugsweise mit einem kostengünstigen oder Open-Source-Tool? Mit etwas Erfahrung weiß ich, dass Olimex einige gute JTAG-Adapter herstellt, und auch Altera USB Blaster ist ein beliebtes Tool. Openocd könnte ein beliebter Softwarekandidat sein.

Es wäre großartig, wenn jemand Licht in irgendeinen Teil der Fragen bringen könnte.

Antworten (2)

Boundary-Scan-Tests (und interne Scan-Tests), unabhängig davon, ob JTAG verwendet wird oder nicht, sind für Produktionstests vorgesehen. Dies unterscheidet sich grundlegend von der Verwendung von JTAG oder SWD für das Software-Debugging. Manchmal werden die gleichen Pins verwendet, aber das ist nicht selbstverständlich.

Es sieht so aus, als würden die Altera-Anweisungen USER0, USER1 verwendet, um auf interne (mit dem Benutzer verbundene) Scan-Ketten zuzugreifen. Dadurch können Sie (mit einem Testmodus-Mux auf jedem Flop) alle Ihre Design-Flops zu (hier zwei) langen Scan-Ketten zusammenschalten. Sie haben die Möglichkeit, die gesamte Logik in Ihrem Design zu lesen und vorab zu laden.

Interne Scanketten wie diese können verwendet werden, um das eigentliche Silizium auf Herstellungsfehler zu überprüfen. Wenn Sie den Scan für die externen Pins verwenden, können Sie auf der Leiterplatte auf Lötunterbrechungen / -kurzschlüsse testen.

Scan kann verwendet werden, um ein Design zu debuggen, aber es ist der letzte Ausweg. Wenn Sie eine Blockierung feststellen, bei der keine andere Debug-Methode Licht auf die Ursache werfen kann, ist es möglich, Scan zu verwenden, um den Entwurfsstatus direkt nach Ihrem Fehler zu extrahieren (vorher ist möglich, aber das würde einen Auslöser oder einen deterministischen Fehler erfordern). Dieser Zustand kann verwendet werden, um Ihre Untersuchung dahingehend zu lenken, welcher Konstruktionszustand den Fehler verursacht, und um die Reproduktion in der Simulation zu unterstützen.

Tools wie SignalTap bieten jetzt einen benutzerfreundlicheren Ansatz für das FPGA-Debugging in Echtzeit. Diese ähneln viel mehr dem Anschluss eines Logikanalysators an eine vordefinierte Auswahl interner Knoten. Denken Sie daran, dass der Scan jeweils 1 Zyklus dauert. zeitlicher Ansatz.

Nach einigem Suchen und Experimentieren wurden einige Beispiele online gefunden:

  • Sehen Sie sich den Blog an , der über die virtuelle jtag-Schnittstelle mit dem de0 nano spricht . Der Autor zeigt detailliert, wie Sie die Logik auf dem FPGA als Teil der Benutzerlogik gestalten können.

  • Ein anderer Autor des Blogs urjtag und python a Lightweight hal , der ebenfalls im obigen Blog erwähnt wird, hat einige Python-Skripte erstellt, die auf dem Google Doc-Server gespeichert sind. Der Python stützt sich auf das svn-Projekt urjtag . Befolgen Sie die Anweisungen im Blog, checken Sie aus und erstellen Sie urjtag auf einem Linux-Rechner, laden Sie dann den vom Blog-Autor freigegebenen Python-Code herunter und führen Sie ihn aus. Sie können über das Jtag-Tool von USB Blaster auf die FPGA-Logik zugreifen. Der Autor hat seinen FPGA-Code auch auf github gespeichert. Also alles Open Source!