Die Erfahrungen mit Test Driven Development (TDD) für Logik (Chip) Design in Verilog oder VHDL

StackOverflow https://stackoverflow.com/questions/1633559

Frage

Ich habe auf dem Netz geschaut und die Diskussionen / Beispiele erscheinen für traditionelle Software-Entwicklung. Da Verilog und VHDL (für Chip-Design verwendet, zum Beispiel FPGAs und ASICs) ist ähnlich wie Softwareentwicklung C und C ++ scheint es Sinn zu machen. Allerdings haben sie einige Unterschiede grundsätzlich parallel zu sein und erfordern Hardware voll Tests.

Welche Erfahrungen, gute und schlechte, haben Sie gemacht? Alle Links können Sie auf diese spezifische Anwendung vorschlagen?

Edits / Erläuterungen: 10/28/09: Ich bin besonders über TDD zu fragen. Ich bin vertraut mit dem Tun Prüfständen, einschließlich Selbstkontrolle diejenigen. Ich bin auch bewusst, dass SystemVerilog einige besondere Merkmale für Prüfstände hat.

10/28/09: Die impliziten Fragen umfassen 1) einen Test für jede Funktionalität zu schreiben, nie Wellenformen für Simulation und 2) Schreibtest / Testbenches erste

.

11/29/09: In Empirische Studien zeigen, Test Driven Development Verbessert Qualität berichten sie für (Software) TDD „Die Pre-Release-Defektdichte der vier Produkte, gemessen als Defekte pro tausend Zeilen Code, verringerte sich zwischen 40% und 90% in Bezug auf die Projekte, die nicht TDD verwendet haben. die Verwaltungsteams berichteten subjektiv eine 15-35% ige Erhöhung der anfänglichen Entwicklungszeit für die Teams mit TDD, obwohl die beiden Mannschaften einig, dass dies durch geringere Wartungskosten ausgeglichen wurde.“ Die reduzierten Fehler reduziert das Risiko für Tape-Out, auf Kosten der mäßigen Zeitplan Auswirkungen. Diese auch einige Daten hat.

11/29/09: Ich bin in erster Linie Kontrolle und Datenweg Code zu tun, nicht DSP-Code. Für DSP beinhaltet die typische Lösung, die eine Matlab-Bit-genaue Simulation.

03.02.10: Der Vorteil von TDD ist, dass Sie sicherstellen, dass der Test zuerst ausfällt. Ich nehme an, dies auch mit Behauptungen getan werden könnte.

War es hilfreich?

Lösung

Ich schreibe Code für FPGAs, nicht ASICS ... aber TDD ist mein immer noch mein bevorzugter Ansatz. Ich mag für alle funktionalen Code eine vollständige Suite von Tests haben, ich schreibe, und ich versuche, (nicht immer erfolgreich) Testcode zuerst zu schreiben. geschieht immer an einem gewissen Punkt an Wellenformen Staring, wenn Sie das Debuggen, aber es ist kein guter Weg, um Ihren Code validieren (IMHO).

In Anbetracht der Schwierigkeit, geeignete Tests in der realen Hardware durchzuführen (stimulierende Fälle Ecke ist besonders hart) und die Tatsache, dass eine VHDL-Kompilierung Sekunden dauert (vs einem „Hardware“ kompilieren, dass viele Minuten (oder sogar Stunden) nimmt) ich sehe nicht, wie jemand eine andere Art und Weise arbeiten kann!

ich auch Behauptungen in die RTL bauen, wie ich es schreibe Dinge zu fangen Ich weiß nicht, jemals passieren sollte. Apparantly wird dies als ein bisschen „weird“ gesehen, da es eine Wahrnehmung ist, dass Verifikationsingenieure schreiben Behauptungen und RTL-Designer nicht. Aber meistens bin ich mein eigenes Prüfingenieur, so vielleicht deshalb!

Andere Tipps

ich VUNIT für Testgetriebene Entwicklung mit VHDL.

VUNIT ist eine Python-Bibliothek, die die VHDL-Compiler und Simulator und liest die Ergebnisse der Simulation aufruft. Es bietet auch einige netten VHDL-Bibliotheken, die es viel einfacher macht besser Prüfstände, wie eine Kommunikation zu schreiben Bibliothek , Logging-Bibliothek und ein Überprüfung Bibliothek .

Es gibt viele Möglichkeiten, da es aus Python aufgerufen wird. Es ist möglich, beiden Testdaten zu generieren, sowie überprüfen Sie die Ausgangsdaten aus dem Test in Python. Ich sah dieses Beispiel neulich, wo sie verwendet Octave - eine Matlab Kopie - zum Plotten Testergebnisse .

VUNIT scheint sehr aktiv, und ich habe mehrmals gelungen, tatsächlich Fragen stellen direkt an die Entwickler und Hilfe sehr schnell bekommen.

Ein Nachteil ist, dass es schwieriger zu debuggen Kompilierungsfehlern ist, da es so viel Funktion / Prozedur Variationen mit dem gleichen Namen in den Bibliotheken sind. Außerdem werden einige Sachen hinter den Kulissen getan, indem den Code Vorverarbeitung, was bedeutet, dass einige Fehler an unerwarteten Stellen auftauchen könnten.

Die SystemVerilog Erweiterungen des IEEE Verilog Norm enthält eine Vielzahl von Konstrukten, die die Schaffung Suiten gründlicher Test erleichtern für komplexes digitales Logik-Design zu verifizieren. SystemVerilog ist eine der die Hardware Verification Sprachen (HVL), die verwendet wird, ASIC-Chip zu überprüfen Entwürfe durch Simulation (wie Emulation oder unter Verwendung von FPGAs gegenüber).

Wesentliche Vorteile gegenüber einem traditionellen Hardware Design Sprache (Verilog) sind:

  • eingeschränkte Randomisierung
  • Behauptungen
  • automatische Erfassung von funktionalen und Behauptung Abdeckungsdaten

Der Schlüssel ist, den Zugriff auf Simulationssoftware zu haben, die unterstützt Dieser letzte (2005) Standard. Nicht alle Simulatoren voll unterstützen die erweiterten Funktionen.

Neben dem IEEE-Standard gibt es eine Open-Source-SystemVerilog-Bibliothek von Verifikationskomponenten von VMM Zentral verfügbar ( http://www.vmmcentral.com ). Es bietet einen angemessenen Rahmen für eine Testumgebung zu schaffen.

Sie können auch mehr Forschung zum Thema tun das durch die Suche Verfication Guild Forum.

SystemVerilog ist nicht die einzige HVL und VMM ist nicht die einzige Bibliothek. Aber ich würde beide empfehlen, , wenn Sie haben Zugriff auf die entsprechenden Werkzeuge. Ich habe dies eine effektive Methode zu sein bei der Suche nach Design gefunden Bugs vor immer Silizium.

Ich weiß nicht viel über Hardware / Chip-Design, aber ich bin tief in TDD, so kann ich mit Ihnen zumindest diskutieren die Eignung des Prozesses.

Die Frage, die ich nennen würde relevanteste ist: Wie schnell kann Ihre Tests geben Sie Feedback zu einem Design? Verwendet dass: Wie schnell können Sie neue Tests hinzu? Und wie gut Ihre Werkzeuge unterstützen Refactoring (verändernde Struktur ohne Verhaltensänderung) Ihres Designs?

Der TDD-Prozess hängt sehr viel über die „Weichheit“ der Software - guten automatisierter Unit-Tests liefen in Sekunden (Minuten an der Außenseite), und kurze Ausbrüche von fokussierten Aufbau und Refactoring führen. Sie Ihre Werkzeuge, um diese Art von Workflow-Unterstützung - schnell zwischen dem Schreiben Radfahren und Tests und den Aufbau der zu testende System in kurzen Iterationen ausgeführt

Im Hinblick auf die Refactoring-Tools für die Hardware-Sprachen, würde Ich mag Ihnen unser Tool zum Punkt Sigasi HDT . Sigasi bietet eine IDE mit integriertem in VHDL-Analysator und VHDL Refactorings.

Philippe Faes, Sigasi

ANVIL - Neue Verilog Interaction Layer Gespräche über diese einige. Ich habe es nicht versucht.

Ich habe nie aktiv versucht TDD auf einem RTL-Design, aber ich hatte meine Gedanken zu diesem Thema.

Was ich denke, wäre interessant ist dieser Ansatz im Zusammenhang mit Behauptungen auszuprobieren. Sie würden im Grunde schreiben zuerst in Form von Behauptungen auf, was Sie von Ihrem Modul übernehmen / erwarten, schreiben Sie Ihr RTL und später können Sie diese Behauptungen mit formalen Werkzeugen und / oder Simulation überprüfen. Im Gegensatz zu „normalen“ Testfällen (wo Sie wahrscheinlich brauchen würden gerichtet diejenigen schreiben), sollten Sie viele bessere Abdeckung haben und die Behauptungen / Annahmen nützlich sein können später (beispielsweise auf Systemebene) als auch.

Allerdings würde ich nicht voll und ganz auf Behauptungen stützt, kann dies sehr haarige werden.

Vielleicht können Sie Ihre Gedanken dazu auch äußern, wie sie es fragen Ich denke, Ihnen ein paar Ideen im Kopf tragen?

Was TDD für Sie? Haben Sie den gesamten Code zu jeder Zeit durch automatische Tests ausgeübt bedeuten hat, oder gehen Sie weiter zu bedeuten, dass die Tests vor dem Code geschrieben werden und kein neuer Code geschrieben wird, es sei denn, Tests fehlschlagen?

Welcher Ansatz Sie es vorziehen, HDL-Code-Test ist nicht sehr verschieden von Software-Tests. Es hat seine Vor (viel bessere Abdeckung und Prüftiefe) und Nachteile (schwer einzurichten und zu umständlich relativ zu Software).

Ich habe mit Verwendung von Python sehr gute Erfahrungen gemacht und generische HDL Transaktionspartnern für eine umfassende und automatische Tests für synthetisierbaren HDL-Module implementiert. Die Idee ist ähnlich zu dem, was Janick Bergeron präsentiert in seine Bücher, sondern von SystemVerilog wird Python verwendet (1) VHDL-Code von Testszenarien geschrieben in Python und (2) die Überprüfung der Ergebnisse durch die Überwachungstransaktoren geschrieben, die Wellenformen von der Konstruktion während der Simulation erzeugen zu akzeptieren.

Es gibt viel mehr zu über diese Technik geschrieben werden, aber ich bin nicht sicher, was Sie konzentrieren möchte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top