Forum: FPGA, VHDL & Co. Generische Debug-Schnittstelle (Signaltap/ILA) über UART - gibt's das schon ?


von Roman D. (roman_d)


Lesenswert?

Hallo zusammen,

in meinem Betrieb setzen wir seit einer Weile einen bunten Mischmasch an 
FPGA-Familien ein und während wir früher mit Altera's Signaltap immer 
viel Spass hatten - ist das bei Lattice' RevealInserter und auch schon 
bei Vivado's ILA Cores manchmal schwierig.

Während man zumeist (Altera/Efinix) das Design so lassen kann wie es ist 
und sich einfach die Signale raussucht, die man gerne sehen möchte muss 
man bei Xilinx mit Signal-Parametern ("Mark as debug") versuchen, das 
Signal in seiner ursprünglichen Form zu retten (sodass die Optimierung 
es nicht frisst) und somit fummelt man im Code rum...

==== Die Idee, die wir hatten

Könnte man nicht mit einem DualPorted-RAM und ein klein bisschen Logik
einen eigenen SignalTap basteln, der die angeschlossenen Signale im 
Kreis herum schreibt, auf eins der eintreffenden Signale triggert und 
dann den RAM-Inhalt auf der UART-Schnittstelle raus schiebt...?

Auf der PC-Seite könnte man die Daten mit einem halbwegs einfach 
gestrickten Programm empfangen und im einfachsten Fall .vcd-Dateien 
erstellen, die man in gtk-Wave anschaut ... oder man visualisiert sie 
on-the-fly :-)

==== Gibt's das nicht schon - oder noch was besseres?

Zumeist ist man (bei einer halbwegs ordentlichen Idee) nicht der erste, 
dem so etwas einfällt - somit würde ich mich freuen, wenn man mir ein 
bisschen Kontra geben könnte:
* weil's das schon gibt
* weil's Blödsinn ist (evtl. hab ich's auch nicht sinnvoll genug 
erklärt)
* weil's bessere Alternativen gibt, mit der Problematik umzugehen

: Bearbeitet durch User
von Martin S. (strubi)


Lesenswert?

Roman D. schrieb:
> Könnte man nicht mit einem DualPorted-RAM und ein klein bisschen Logik
> einen eigenen SignalTap basteln, der die angeschlossenen Signale im
> Kreis herum schreibt, auf eins der eintreffenden Signale triggert und
> dann den RAM-Inhalt auf der UART-Schnittstelle raus schiebt...?

Ja, kann man, Stichwort 'trace buffer'.
Den lese ich allerdings typischerweise per JTAG aus (je nach Architektur 
unter argem Vorbehalt), oder streame alles gleich per UDP an einen 
Socket, mit socat kann man dann in der Tat recht elegant die 
Wellenformen in gtkwave reinstreamen, oder man nutzt die sigrok-Tools.
Fuer so hartes Debugging ueber Distanz wird dafuer auch gerne ein 
FPGA-Kaertchen als JTAG-Adapter eingesetzt.
UART bindet halt viele Resourcen, ist langsam und braucht on top noch 
ein Protokoll.

Bisher ist mir auch noch keine bessere Loesung ueber den Weg gelaufen. 
Das Problem ist in der Tat, dass die Hersteller-Tools a la Reveal bei 
komplexeren Designs mehr Probleme schaffen als loesen, besonders, wenn 
man einen CPU-Debug-TAP auf Basis der eingebauten Primitiven nutzt.

Da man ein Debug-Tool moeglichst nicht auch noch debuggen will, ist man 
fuer seinen Zweck wohl am besten beraten, eine in der eigenen 
Testumgebung verifizierbare Loesung zu bauen.

von Roman D. (roman_d)


Lesenswert?

schon mal vielen Dank für die schnelle Antwort.
Werd ich mal nachlesen (mit den TraceBuffern).

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Vor zwölf Jahren hat mal ein engagierter Forist ein ähnliches Projekt 
hochgeladen:
* https://www.mikrocontroller.net/articles/Durchblicker

Das zeichnet nach einem Trigger die Signal auf und stellt diese ganz 
ohne PC auf einem VGA-Monitor dar. Implementiert auf einem 
Xilinx-Evalboard mit spartan-CPU.

> man bei Xilinx mit Signal-Parametern ("Mark as debug") versuchen, das
> Signal in seiner ursprünglichen Form zu retten (sodass die Optimierung
> es nicht frisst) und somit fummelt man im Code rum...

Diese Fummelei kann ich zumindest für neuere Designs so nicht 
bestätigen. Da hat sich aber mit Vivado statt ISE einige 
weiterentwickelt. So nennt man es nicht mehr Chipscope sonder ILA 
(Integrated Logic Analyzer) und der funktioniert als Blockdesign (zu 
instrumentierende Signale müssen Ports von Blöcken sein) ganz gut.
Vielleicht gilt das besonders für die Zynq-Familie, die m.E. dafür auch 
den Debugport der ARM's im PS mitbenutzt. Da nutzt man auch nicht die 
JTAG-Programmieradapter sondern meist die USB-Schnittstelle auf dem 
Board.

von Thorsten S. (thosch)


Lesenswert?

Wir hatten genau sowas (Debugger mit Blockrams und UART) bei einem 
früheren AG.
In den Blockrams wurden die angeschlossenen Signale RLE-komprimiert 
gespeichert, was den Vorteil hatte, daß man Signale, die nur selten den 
Zustand wechseln, über lange Zeiträume und in hoher Zeitauflösung 
betrachten konnte.
z.B. im Bereich Videotechnik ein Vertikalsynchronsignal und das 
Teilbildflag zusammen in 120 MHz Abtastrate über mehrere Bilder hinweg 
(~200ms)

von Christoph Z. (christophz)


Lesenswert?

Roman D. schrieb:
> Zumeist ist man (bei einer halbwegs ordentlichen Idee) nicht der erste,
> dem so etwas einfällt - somit würde ich mich freuen, wenn man mir ein
> bisschen Kontra geben könnte:
> * weil's das schon gibt

Ja, die Idee ist halbwegs ordentlich und entsprechend hatte 2005 jemand 
mal so etwas gebaut. Damals noch mit JTAG bitbanging am Parallelport:
https://sourceforge.net/projects/chipspy/

Eine andere Idee kann sein, sich einen SUMP logic analyzer in den FPGA 
zu packen und dann einfach nur interne signal anzuklemmen. Natürlich 
nicht mehr mit der original Software sondern mit sigrok:
https://sigrok.org/wiki/SUMP_compatibles

> * weil's bessere Alternativen gibt, mit der Problematik umzugehen

Bei unseren BLDC Motoransteuerungen (Strom- und Positionsregelung) haben 
wir zum Auslegen und Fehlerfinden einen internen Datenrecorder. Das ist 
kein Logic Analyzer sondern nur ein FIFO aus Blockram der bei einem 
Valid Signal einen Datenwert speichert (z. B. Eingangströme und 
Stromreglerausgang bei jedem PWM Zyklus). Wäre einfach, dem Ding noch 
ein einfaches Triggersystem zu geben.

Tip: Hänge deinen eigenen Analyser (zusätzlich) an die selbe 
Schnittstelle wie alle andere Funktionalität.

Unser Recorder ist angeschlossen am internen AHB/AXI Bus und kann so 
ausgelesen werden wie jedes andere Register. Heisst in unserem Fall wir 
könnten den Recorder nutzen lange nach dem Raketenstart um zu messen ob 
noch alles richtig geht.


Bei einem früheren Arbeitgeber in der Leistungselektronik hatten wir 
einen Ringpuffer der alle ADC Werte mitgelesen hatte. Triggereingang zum 
Stoppen war die Überstromabschaltung und man konnte das 
pre-/post-trigger Verhältnis wie bei einem richtigen Logic Analyzer 
einstellen.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

ADC Werte Protokollieren ist IMHO was anderes als des Logik-Debug wie es 
dem TO vorschwebt.

Bei den FPGA-interenen ADC sollte auslesen über JTAG/Debug ohne extra 
User-Logik funktionieren (Stichwort Systemmonitor).

Neben dem Protokollieren bieten sich bei AD-Werten von sensoren auch das 
Inverese, der Player an um die Regelstrecke auf Schwingneigung etc zu 
untersuchen ohne das Gerät in einen Teststand einzubauen.

von Roman D. (roman_d)


Lesenswert?

Wow - das waren jetzt wirklich lauter interessante und sehr 
fachdienliche Antworten.

Der Tipp mit **sigrok** ist super - das hätte ich sicherlich nicht 
gefunden. Dass ein Arbeitgeber das schon mal umgesetzt und im 
Real-Einsatz genutzt hat ist auch eine super Info.

Wir würden mal versuchen, ne Studien-Arbeit in dem Themengebiet 
zusammenzuschreiben und jemand motiviertes zu finden.
=> Würden es dann (wenn's was wird) durchaus als OpenSource laufen 
lassen und irgendwo bei opencores o.ä. einpflegen.

Vorerst auf jeden Fall schon mal vielen Dank für den ganzen Input.
Wenn's weiter geht würde ich auf jeden Fall hier noch was posten...

von J. S. (engineer) Benutzerseite


Lesenswert?

Bradward B. schrieb:
>> man bei Xilinx mit Signal-Parametern ("Mark as debug") versuchen, das
>> Signal in seiner ursprünglichen Form zu retten (sodass die Optimierung
>> es nicht frisst) und somit fummelt man im Code rum...
>
> Diese Fummelei kann ich zumindest für neuere Designs so nicht
> bestätigen.

Man muss das nicht mit "mark debug machen". Geht über ein script 
einfacher. Man lässt das einmal bauen und hinterlegt das dann. Auf diese 
Weise kann man man verschieden Versionen hinzuladen ohne das jedesmal im 
grafischen Design zu ändern. Das ist unnötige Spielerei.

von Pandur S. (jetztnicht)


Lesenswert?

Ich habe gerne einen Mehrkanal DAC anschliessbar. Der wird per SPI 
angesteuert, Den kann man fuer einen Prototypen bestuecken und nachher 
weglassen, oder auch nur die 5 Pins per Draht/Kabel verbinden. Und sich 
dann die Werte analog rausgeben lassen fuer ein Oszilloskop. Fuer 
kontinuierliche Rechenwerte.

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.