Forum: FPGA, VHDL & Co. Bücher zu Testbenches in VHDL


von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Hallo allerseits,

ich mache seit ein Paar Jahren sporadisch kleinere Projekte mit VHDL und 
falle dabei regelmäßig auf diese Nase. Suche dann Stunden oder Tage lang 
in überquellenden Waveform-Plots nach dem entscheidenden off-by-one 
Fehler oder dem einen Takt Verzögerung in irgendeiner State Machine, den 
ich nicht berücksichtigt habe...

Sicherlich wird man da mit mehr Erfahrung schneller und sicherer, was 
mich aber am meisten stört, ist das viele Waveform-Anstarren. Ich würde 
gerne die gängisten Problemfälle (z.B. FIFO overflow, underrun...) in 
automatischen Testbenches prüfen, damit ich es wenigstens merke wenn ich 
bei der Weiterentwicklung etwas kaputt spiele. Bei Software kann man das 
ja auch recht komfortabel mit Unit Tests anstellen.

Kennt jemand ein gutes Buch, das praktische Tipps und Beipiele liefert, 
wie man mit VHDL einigermaßen kompakte automatische (self-checking) 
Testbenches hinbekommt? Meine Testbenches erzeugen meist nur Stimuli, 
der Rest ist dann das o.g. Waveform-Anstarren. Das muss doch irgendwie 
besser gehen...

Sebastian

von berndl (Gast)


Lesenswert?

Buch kenne ich keines...

Was du aber machen kannst:
* Eine 'component' in einer TB mit Eingaben beaufschlagen und die 
erwarteten Ausgaben ueberpruefen (z.B. mit 'assert')
* Wenn die 'component' tiefer im Design vergraben ist, dann halt das 
gleiche auf etwas abstrakterer Ebene (also nicht mehr auf die 
Nanosekunde genau), auch wieder mit z.B. 'assert' checken

Deine Eingaben (Stimuli) kannst du a) deterministisch machen und b) mit 
random pattern, da wird halt das ueberpruefen der Ausgaben leicht ein 
echter Moloch an TB-code.

Um in die Denke ueberhaupt mal rein zu kommen, kann ich nur empfehlen: 
Mal eine 'tricky' component mal so mit einer TB zu beharken. Du wirst 
dann auch schnell feststellen, dass die Anzahl Codezeilen fuer die TB 
die des Designs locker uebersteigen... Und dann gilt es halt in Zukunft, 
ein gesundes Mass zu finden (was mache ich mit TB, was mit der echten 
HW).

Nicht umsonst sind bei den Chip-/Logic-Designern in den Firmen die 
'Simulanten' meist die groessere Truppe...

von Buff (Gast)


Lesenswert?

> Meine Testbenches erzeugen meist nur Stimuli,
> der Rest ist dann das o.g. Waveform-Anstarren.

Dito... Heute erst wieder den ganzen Tag nur auf die grünen Waveforms 
gestarrt. Ich muss sagen, dass richtiges Testen teils anspruchsvoller 
ist als das Erstellen des Designs.

Ich gehe da bislang auch noch nicht richtig ran fürchte ich. Ich erzeuge 
Stimuli, welche nicht alle Fälle abdeckt und hoffe meist, dass ich 
nichts Wichtiges übersehen habe. Meine Testbenches sehen noch ziemlich 
simpel gestrickt aus.

Dann gibt es ja auch noch zig zustände in welchen das System sich grade 
befinden kann. Diverse Konfigurationen werden dann auch noch mit nem 
Softcoreprozessor vorgegeben und und und...

Hätte an einem Buch sicher auch interesse...

von berndl (Gast)


Lesenswert?

Buff schrieb:
>> Meine Testbenches erzeugen meist nur Stimuli,
>> der Rest ist dann das o.g. Waveform-Anstarren.
>
> Dito... Heute erst wieder den ganzen Tag nur auf die grünen Waveforms
> gestarrt. Ich muss sagen, dass richtiges Testen teils anspruchsvoller
> ist als das Erstellen des Designs.

Naja, als Designer sagst du dir: Ich habe diese und jene Inputs und muss 
eine Funktion (einen Output) bringen. Als Tester/Simulant (nicht 
abwertend gemeint!) siehst du: Ich habe 2-hoch-saumaessig-viele 
Eingangskombinationen, wie kriege ich die alle getestet?
Das ist die andere Seite der Medaille...

>
> Ich gehe da bislang auch noch nicht richtig ran fürchte ich. Ich erzeuge
> Stimuli, welche nicht alle Fälle abdeckt und hoffe meist, dass ich
> nichts Wichtiges übersehen habe. Meine Testbenches sehen noch ziemlich
> simpel gestrickt aus.
>
> Dann gibt es ja auch noch zig zustände in welchen das System sich grade
> befinden kann. Diverse Konfigurationen werden dann auch noch mit nem
> Softcoreprozessor vorgegeben und und und...

Dann kann so etwas wie 'formale Verifikation' weiter helfen. Aber da 
wird es dann auch recht schnell ziemlich kompliziert. Fuer 'normale' 
FPGA-Designs ist da immer der Spagat, was in Simulation und was in 
echter HW testen. Im Chip-Design gelten andere Massstaebe, ein 'Schuss 
in den Ofen' kostet da richtig viel Geld...
Aber auch moderne SoC funktionieren nur deshalb fuer relativ wenig Geld, 
weil eben auf 'Unit-Simulation' mehr Wert/Beachtung gelegt wird.

>
> Hätte an einem Buch sicher auch interesse...

Ich hab' so den Verdacht, die Typen, die so ein Buch schreiben koennen, 
die verdienen in der Zeit mit 'doing' mehr Geld. Und Hochschulprofs sind 
da glaube ich echt zu weit entfernt, als dass da mal was aus der 
Richtung kommen koennte. Theorien und Papers gibts genug, aber leider 
i.A. nicht fuer uns 'kleine Schlucker'...

von Schlumpf (Gast)


Lesenswert?

Schwieriges Thema :-(
Und wirklich gute Literatur darüber ist schwer zu finden... oder 
sauteuer und recht komplex, so dass sie als Einstieg nur bedingt taugt.

Was Berndl sagt, kann ich nur unterstreichen.
Man muss immer den Spagat zwischen endlichem Testaufwand und erreichter 
Testtiefe machen.
Und man muss sich einfach darüber im Klaren sein, dass man mit jeder 
Testbench nur an der Oberfläche der Möglichkeiten kratzt.

Aber dennoch kann man die Testfälle natürlich mehr oder weniger schlau 
festlegen.
Wenn du z.B. weisst, dass du einen FIFO im System hast, dann weisst du 
auch, welche Betriebszustände z.B. einen Überlauf produzieren könnten.
Genau diese Fälle gilt es zu identifizieren und per Stimulus zu 
provozieren.
In der Regel hat das dann auch eine Auswirkung am äußeren Verhalten des 
DUT, welches dann von der Testbench ausgewertet werden kann.

Ich gehe das Thema dann meistens so an, dass ich mir erst überlege, 
welche Testfälle ich gerne durchspielen würde.
Anahnd dieser identifiziere ich dann bestimmte Funktionen, die immer 
wieder benötigt werden. z.B. ein Schreibzugriff auf eine bestimmte 
Adresse (Falls dein Design ein Prozessorinterface hat). Für diese 
Funktion baue ich mir dann eine Funktion oder Procedure die genau das 
macht.

Dann hat man einen Punkt erreicht, wo man schon ein wenig abstrakter 
bestimmte Testfälle erzeugen kann und nicht jedes Signal immer und immer 
wieder einzeln setzen und zurücksetzen muss.

Die Überwachung und Auswertung der "Antworten" des Systems kann man auf 
vielerlei Arten durchführen.
z.B. kann man überlegen, ob es Zustände der Ausgänge gibt die NIEMALS 
auftreten dürfen. Das können sowohl bestimmte Kombinationen von 
Ausgangssignalen sein, oder auch zeitliche Abfolgen von Signalen.
Für diese Fälle kann man sich, ich nenne es immer "Monitore" basteln, 
die, jeder für sich, in einem separaten Prozess abgebildet werden.
Diese Monitore "überwachen" dauernd die Ausgänge des Systems und 
identifizieren die unzulässigen Betriebszustände und schmeißen einen 
Assert, wenn der Fall eintritt. Diese Prozesse können ungesteuert vom 
aktuellen Systemzustand laufen, da sie die Fälle abdecken, die 
unahbhängig vom Sytemzustand niemals auftreten dürfen.
Das heißt, sie laufen einfach immer parallel "im Hintergrund mit".

Die anderen Fälle kann man durch Anlegen eines Stimulus (z.B. unter 
Verwendung einer der oben beschriebenen Funktionen) erzeugen, die 
Reaktionszeit des DUT abwarten und danach die Antwort des Systems lesen 
und mit dem Sollwert vergleichen.
Diese Abfolgen aus Stimulus anlegen und Response auswerten werden dann 
alle in EINEM Prozess nacheinander abgearbeitet.
Zyklisch wiederkehrende Stimulus (wie z.B. der Systemtakt) können aber 
sinnvollerweise in einem separaten Prozess beaufschlagt werden.

Falls du mit Modelsim arbeitest, bietet der die Möglichkeit, sogar auf 
interne Signale des Designs zuzugreifen. Stichwort hierzu ist 
"init_signal_spy()". Wobei ich damit sparsam wäre, da das was 
Modelsim-Spezielles ist, was dann nicht auf jedem anderen Simulator 
funktioniert.

Die von Berndl vorgeschlagene Methode, für einzelne Complonentes 
separate Testbenches zu schreiben und diese getrennt zu testen, kann ich 
auch empfehlen. Der Komplexitätsgrad sinkt und die Testtiefe steigt, da 
man an einer interne Component ggf. leichter bestimmte Zustände erzeugen 
kann, als das dann "von außen" der Fall wäre.

Ich weiss nicht, ob dir das alles jetzt wirklich weiter hilft, aber 
letztendlich gibt es meiner Meinung nach kein gernelles "Kochrezept" für 
den Aufbau einer Testbench, sondern muss von Fall zu Fall neu 
entschieden werden.

Ach ja: In einer Testbench ist natürlich jede "Sauerei" erlaubt:
exzessives Nutzen von Variablen, Schleifen, wait for, etc...
Hier ist man ganz gut bedient, wenn man wieder ein bisschen mehr die 
Software-Denke einschaltet :-)

von Fpgakuechle K. (Gast)


Lesenswert?

Sebastian B. schrieb:

> Kennt jemand ein gutes Buch, das praktische Tipps und Beipiele liefert,
> wie man mit VHDL einigermaßen kompakte automatische (self-checking)
> Testbenches hinbekommt? Meine Testbenches erzeugen meist nur Stimuli,
> der Rest ist dann das o.g. Waveform-Anstarren. Das muss doch irgendwie
> besser gehen...

http://www.amazon.de/Writing-Testbenches-Functional-Verification-Models/dp/1402074018


Wenn es mehr um eine HDL-übergreifende Darstellung zu Chip-Verification 
gehen soll:

http://www.amazon.de/Comprehensive-Functional-Verification-Complete-Industry/dp/0127518037/ref=sr_1_1?s=books-intl-de&ie=UTF8&qid=1414093278&sr=1-1&keywords=Comprehensive+Functional

MfG,

von Schlumpf (Gast)


Lesenswert?

Fpga Kuechle schrieb:
> 
http://www.amazon.de/Writing-Testbenches-Functional-Verification-Models/dp/1402074018

Das Buch hatten wir in meiner alten Firma.. definitiv ein sehr gutes 
Buch, aber ich habe es bewussst nicht vorgeschlagen, da der Inhalt nicht 
gerade aus der "... für Dummies"-Reihe ist und meines Erachtens für 
jemanden, der bisher nur durch Anstarren von Waveforms "getestet" hat, 
schon eher schwere Kost sein dürfte.

von Hartwarenersteller (Gast)


Lesenswert?

Schlumpf schrieb:
> Die von Berndl vorgeschlagene Methode, für einzelne Complonentes
> separate Testbenches zu schreiben und diese getrennt zu testen, kann ich
> auch empfehlen.

So und nur so, kann man die Funktion komplett testen. Ansonsten 
multiplizieren sich die Kombinationen gegenseitig hoch und es wird 
unübersichtlich.

Ausserdem können so die Module leichter simuliert und dokumentiert 
werden.

von Schlumpf (Gast)


Lesenswert?

Hartwarenersteller schrieb:
> So und nur so, kann man die Funktion komplett testen.

Ganz so krass würde ich es nicht formulieren.

1. Kann die Funktion ab einem gewissen Komplexitätsgrad sowieso nie 
komplett in vernünftiger Zeit getestet werden, da die 
Kombinationsmöglichkeiten sehr schnell gegen undendlich gehen.

2. Ist es unter Umständen unnötig, Betriebszustände einer Component zu 
testen, von denen man weiss, dass diese Zustände im kompletten System 
nicht herbeiführbar sind.
Denn können sie per se im System nicht auftreten, dann muss man sie auch 
nicht isoliert an der Component testen.
Wäre der Zustand aber von außen im System herbeiführbar, und somit 
relevant, dann kann er auch von außen stimuliert werden.

ABER:
Es kann aufwändiger sein, diesen Zustand von außen zu stimuieren, als 
direkt an den Schnittstellen der Component.

Am Ende muss aber meines Erachtens immer eine Simulation des gesamten 
Designs erfolgen. Ist ja nicht auszuschließen, dass man beim 
Zusammensetzen der Components einen Fehler gemacht hat.

von Christoph Z. (christophz)


Lesenswert?

Ein Buch das in das Thema einführt kenne ich bis jetzt auch nicht, habe 
mich daher auch selber auf das Niveau von Schlumpf hinaufarbeiten 
müssen. Die Idee mit den parallel mitlaufenden "Monitoren" benutze ich 
auch, brauchte aber eine weile bis ich selber darauf kam :-) (heissen 
bei mir einfach "Observer"). Teilweise habe ich die auch zu "Virtual 
instruments" ausgebaut um gezielt Puls-Pausen Verhältnisse, Pulslängen 
etc. auszumessen.

Was es aber gibt, sind Kurse zum Thema. Z. B. diesen (wurde anfang Jahr 
auch in Deutschland angeboten, aber leider abgesagt wegen zu wenig 
Teilnehmern):
http://synthworks.com/vhdl_testbench_verification.htm

von Harry (Gast)


Lesenswert?

>Was es aber gibt, sind Kurse zum Thema. Z. B. diesen (wurde anfang Jahr
>auch in Deutschland angeboten, aber leider abgesagt wegen zu wenig
>Teilnehmern):

Jaja, erstens zu teuer und zweitens nichts Neues und drittens wollte der 
Type auch mal ein Buch schreiben... da hätte er sicherlich mehr mit 
verdient ...

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

> http://www.amazon.de/Writing-Testbenches-Functiona...

Eventuell wäre hier sogar die erste Ausgabe besser geeignet (und 
wahrscheinlich billiger), da sie sich auf "reines" Verilog und VHDL 
bezieht und nicht durch HVLs wie Vera und Specman "Verwirrung" stiftet.

von berndl (Gast)


Lesenswert?

Marcus Harnisch schrieb:
>> http://www.amazon.de/Writing-Testbenches-Functiona...
>
> Eventuell wäre hier sogar die erste Ausgabe besser geeignet (und
> wahrscheinlich billiger), da sie sich auf "reines" Verilog und VHDL
> bezieht und nicht durch HVLs wie Vera und Specman "Verwirrung" stiftet.

hmm, bei mir hier ein 'toter Link'...

Hallo Marcus,
du bist nicht mehr bei Doulous? Du hast hier immer sehr fundierte 
Kommentare zu VHDL und Verilog abgegeben, schade. Hoffe du hast was 
'gescheites' gefunden...

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

berndl schrieb:
> hmm, bei mir hier ein 'toter Link'...

Der vollständige Link wurde ja schon weiter oben gepostet. Ich hab nur 
zitiert.

> du bist nicht mehr bei Doulous? Du hast hier immer sehr fundierte
> Kommentare zu VHDL und Verilog abgegeben, schade.

Bin wieder in der Entwicklung, aber das schließt die Kommentare nicht 
aus. Erstens hab ich ja nicht plötzlich alles vergessen und außerdem 
gehört das immer noch zum Tagesgeschäft.

> Hoffe du hast was 'gescheites' gefunden...

Kann nicht klagen :)

von berndl (Gast)


Lesenswert?

Marcus Harnisch schrieb:
> Kann nicht klagen :)

Schoen!

von berndl (Gast)


Lesenswert?

Schlumpf schrieb:
> Ach ja: In einer Testbench ist natürlich jede "Sauerei" erlaubt:
> exzessives Nutzen von Variablen, Schleifen, wait for, etc...
> Hier ist man ganz gut bedient, wenn man wieder ein bisschen mehr die
> Software-Denke einschaltet :-)

Achja, das kann ich nur unterstreichen! Dafuer wurde VHDL eingentlich 
auch mal erfunden...

von dose (Gast)


Lesenswert?

Zum testen schreibe ich auch manchmal in eine Datei. Darin kann man auch 
die Zeit schreiben. Wenn man so dir kritischen Zeiten erfasst, muss man 
nicht die ganzen Diagramme durchforsten.

von Schlumpf (Gast)


Lesenswert?

berndl schrieb:
> Achja, das kann ich nur unterstreichen! Dafuer wurde VHDL eingentlich
> auch mal erfunden...

Richtig, ursprünglich lag der Fokus von VHDL darin, das Verhalten einer 
Schaltung zu spezifiziern und zu beschreiben. Was aber nicht automatisch 
heißt, dass das mit Konstrukten geschenen muss, die auch synthetisierbar 
sind. Es diente eher dazu, das Verhalten einer Schaltung zu modellieren.

Da ergibt sich dann auch noch eine weitere Methode, wie man eine 
Testbench aufbauen kann.
Wenn man das Verhalten des DUT noch einmal in nicht synthetisierbarem 
VHDL modelliert, kann man parallel das DUT und das nicht 
synthetisierbare Modell mit dem identischen Stimulus beaufschlagen und 
prüfen, ob sich das "Modell" und der Code zur Implementierung gleich 
verhalten.
Aber das ist dann schon eine sehr aufwändige Methode.
Kann aber durchaus sinnvoll sein, wenn bei komplexeren Systemen mehrere 
Funtionseinheiten erst einmal abstrakt in VHDL modelliert werden, um das 
korrekte Zusammespiel der Einheiten zu simuliern. Dabei kann in einem 
frühen Stadium bereits festgestellt werden, ob die Spezifikation 
überhaupt so umgesetzt werden kann.
In diesem Fall liegen dann bereits Modelle vor, gegen die dann der Code, 
der zur Implementierung dient, getestet werden kann.

Aber das nur der Vollständigkeit halber. Die Methode ist schon echt 
aufwändig.

von berndl (Gast)


Lesenswert?

Schlumpf schrieb:
> Wenn man das Verhalten des DUT noch einmal in nicht synthetisierbarem
> VHDL modelliert, kann man parallel das DUT und das nicht
> synthetisierbare Modell mit dem identischen Stimulus beaufschlagen und
> prüfen, ob sich das "Modell" und der Code zur Implementierung gleich
> verhalten.

siehe z.B. hier: http://www.stefanvhdl.com/
Da findet sich noch mehr interessantes

von Duke Scarring (Gast)


Lesenswert?

Schlumpf schrieb:
> Wenn man das Verhalten des DUT noch einmal in nicht synthetisierbarem
> VHDL modelliert,

Dafür nutze ich lieber eine Alternative, wie Python oder Matlab.

Duke

von Ladislaus Lamda (Gast)


Lesenswert?

Duke Scarring schrieb:
> Schlumpf schrieb:
>> Wenn man das Verhalten des DUT noch einmal in nicht synthetisierbarem
>> VHDL modelliert,
>
> Dafür nutze ich lieber eine Alternative, wie Python oder Matlab

Ist matlab mit einem Hobbyisten Budget möglich? Also statt 2-3 guter 
fachbucher könnte man auch 200€ für eine Lizenz ausgeben, bezweifle aber 
das das genügt.

von Duke Scarring (Gast)


Lesenswert?

Ladislaus Lamda schrieb:
> Ist matlab mit einem Hobbyisten Budget möglich?
Das kann ich nicht beurteilen.
Es soll wohl Bücher mit passender Lizenz geben.

Außerdem gibt (OpenSource-)Alternativen zu Matlab. Aber damit verlassen 
wir das ursprüngliche Thema völlig...

Duke

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich habe eine alte Studentenversion von Matlab, die konnte man damals im 
Buchladen ohne Studentenausweis kaufen. Für 99 DM, auf Disketten...
Schau mal nach bei mathworks, ob es sowas ähnliches noch gibt, sonst 
halt Scilab/Octave.
Wolfram Research hat eine Mathematica Gratisversion für den Raspberry 
Pi. Aber das scheint mir einen anderen Bereich der Mathematiksoftware 
abzudecken.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Sebastian B. schrieb:
> Kennt jemand ein gutes Buch, das praktische Tipps und Beipiele liefert,
> wie man mit VHDL einigermaßen kompakte automatische (self-checking)
> Testbenches hinbekommt? Meine Testbenches erzeugen meist nur Stimuli
Link:
https://www.aldec.com/en/products/fpga_simulation/active-hdl
Das Forum und die diversen Tools dazu, bzw. negativ Tests.
Einfach mal durchlesen, bzw. habe ich mir die Videos dazu angeschaut.
Einfach klasse gemacht.
Viel Erfolg.
Gruss Holger.

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.