Assertionsbasierte Verifikation: Für und Wider

7. November 2007, 18:34 Uhr | Bindesh Patel
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

Assertionsbasierte Verifikation: Für und Wider

Während eine spezielle Assertionssprache offensichtlich bereits wegen der Kürze der Beschreibung vorteilhaft ist, bieten Assertions aus Sicht der Methodik viele weitere und nicht minder wichtige Vorteile. Hierzu zählen:

  • Assertions stellen eine wirkungsvolle Möglichkeit dar, eine Verifikationsumgebung um die Aspekte Beobachtbarkeit und Test zu erweitern. Die Assertions können an den Stellen des Designs eingefügt werden, die zu kontrollieren sind.
  • Assertions werden auf einer höheren Abstraktionsebene programmiert, sodass es sich eher um einen Spezifikationsvorgang denn um einen Implementierungsprozess handelt. Diese Spezifikation lässt sich durch dynamische oder statische (formale) Verifikationswerkzeuge automatisch prüfen.
  • Assertion-Sprachen sind flexibel. Der Code kann Bestandteil der Implementierung sein oder separat erzeugt werden. Sie arbeiten ohne weitere Modifikationen mit bereits verwendeten Flows zusammen. Dadurch lassen sich Assertion-Methoden einfach einführen.
  • Assertions erleichtern die Nutzung und Bereitstellung von IP. Sie können mit dem IP ausgeliefert werden, damit Anwender die Funktion des IPs nach der Integration in das System prüfen können. Zudem besteht die Möglichkeit, Assertions zur Beurteilung der Coverage des IPs heranzuziehen.

Effiziente Assertionsmethode

Zwar können Assertions sowohl dynamisch als auch statisch (formal) überprüft werden, aus Platzgründen beschränken sich die folgenden Betrachtungen jedoch auf den dynamischen Test (Simulation). Die Mehrheit der kommerziellen Simulatoren unterstützt heute Standard- Assertions-Sprachen bzw. steht kurz davor. Zwar bewältigen Simulatoren einfache Assertionsüberprüfungen recht gut, die Akquisition der Hilfsdaten (für das Debuggen und Analysieren erforderliche Daten) während der Ausführung reduziert aber die Simulatorgeschwindigkeit massiv. Die temporale Natur von Assertions kann gleichzeitig zahlreiche Versuche (Prüfungen) und Threads hervorrufen, die den Simulator ausbremsen und den Speicherbedarf beim Sammeln der erforderlichen Hilfsdaten ansteigen lassen. Wird der Großteil dieser Aufgabe auf das Debug-System übertragen, das sich wiederum so optimieren lässt, dass es nur die wirklich benötigten Daten ermittelt, entlastet dies den Simulator und beeinträchtigt so die Performance weniger. In dieser Konstellation erzeugt das Debug-System automatisch die benötigten Hilfsdaten, sodass der Simulator die Prüfungen wesentlich effektiver durchführen kann. Im Idealfall testet das Debug-System die Assertions gegen die während der Simulation erfassten Signaldaten, sodass der Simulator keine Zusatzaufgaben erfüllen muss, um ein Prüfen der Assertions zu ermöglichen. Bei diesem Ansatz lassen sich Assertions für die Steuerung der Extraktion des Designverhaltens aus einer Datei nutzen, welche die Signalverläufe enthält. Solche Signal-Trace-Dateien werden bei üblichen Verifikationsmethoden ohnehin erzeugt.

Diese Funktion kann sich auch während der Assertionserstellung als hilfreich erweisen, da sich Assertions schnell und unmittelbar bei ihrer Erstellung prüfen lassen. Alternativ wäre es notwendig, nach jeder kleinen Änderung im Assertionscode erneut einen Simulationsdurchlauf zu starten, was viel Zeit in Anspruch nehmen kann. Glücklicherweise profitieren Assertion- basierte Methoden besonders davon, wenn Debugsysteme einen Teil der Aufgaben übernehmen, die traditionell dem Simulator vorbehalten waren.

Da das Debuggen von Assertion- Fehlern eine komplexe Aufgabe ist, muss das Debugsystem folgende Funktionen bieten:

  • Funktionen zum Debuggen von Assertion-Quellcode mit Tracing-Möglichkeiten zwischen den Properties, Sequenzen, Ereignissen und dem Design.
  • Navigations-, Such- und Filterfunktionen für die Assertion-Elemente.
  • Funktionen zur Übernahme von Assertion-Ergebnissen aus Simulationen in eine Datenbank, die dann für ein auf die Simulation folgendes Debugging zur Verfügung steht.
  • Offline-Prüfung (Data-Mining) von Assertions auf Basis erfasster Signaldaten, das heißt, ohne einen Simulator.
  • Anzeigefunktionen der Assertion-Ergebnisse in Waveform-Darstellung und im Kontext des Quellcodes.
  • Passende Funktionen zur Handhabung lokaler Variablen, die es dem Anwender erlauben, schnell den Wert einer lokalen Variable für einen bestimmten Versuch oder Thread einzusehen.
  • Identifizierungsmechanismen, damit der Anwender schnell zu den Designsignalen springen kann, die das Verhalten der Assertion bestimmen.


  1. Assertionsbasierte Verifikation: Für und Wider
  2. Assertions debuggen
  3. Assertionsbasierte Verifikation: Für und Wider

Jetzt kostenfreie Newsletter bestellen!