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.

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.