Automatisierte C-Testgenerierung für umfassende Embedded-SoC-Verifikation
SoC-Designs werden zunehmend komplexer, doch viele systemweite Verifikations-Testsuites bestehen immer noch aus tausenden manuell geschriebenen Zeilen C-Code – ein veralteter Ansatz, der dem Automatisierungsprinzip widerspricht. Insbesondere C-Tests, die auf eingebetteten Prozessoren ausgeführt werden, um das gesamte Device vor der Fertigung zu validieren, bleiben weitgehend manuell.
Vorteile der Testautomatisierung
Automatisierte Testgenerierung steigert die Produktivität über alle SoC-Entwicklungsphasen hinweg. Constrained-Random-Methoden in UVM-Testbenches generieren szenariospezifische Zufallsvektoren und verbessern die Abdeckung auf Blockebene. Das Design bleibt jedoch eine Black Box, wobei Stimuli, Checks und Coverage-Code separat geschrieben werden – ein umständlicher und fehleranfälliger Prozess für große Blöcke.
Die Erweiterung dieser Methoden auf Systemebene ist herausfordernd, da sie Prozessor-Testcode mit I/O-Transaktionen integrieren müssen, typischerweise ausgeführt auf Emulatoren oder Prototypen. Vollständige SoC-Verifikation erfordert das Ausüben der Prozessoren selbst, aber UVM und andere Constrained-Random-Techniken lassen Prozessorcode generally außen vor. In der Praxis wird UVM auf SoC-Ebene angewendet, indem Prozessoren durch virtuelle I/O ersetzt werden, sodass das Subsystem minus Prozessor getestet wird.
Angesichts der Mängel von Constrained-Random-Testbenches greifen Ingenieure auf manuell geschriebene C-Tests zurück, die auf Prozessoren sowohl in Simulation als auch Hardware-Emulation laufen. Diese Plattformen unterstützen jedoch kein vollständiges OS; Tests laufen im Bare-Metal-Modus, was den Kompositionsaufwand erhöht. Koordinierte Multi-Core-, Multi-Thread-Ausführung ist selten, sodass kritische Verhaltensweisen – Konkurrenz und Kohärenz – nur begrenzt verifiziert werden.
Automatische C-Testgenerierung
Automatisierte C-Testgenerierung spart Engineering-Zeit und erweitert die Abdeckung. Generierte Testfälle decken mehr SoC-Funktionalität ab als handgeschriebene und decken schwierige Corner Cases auf. Multi-Threaded-, Multi-Prozessor-Tests üben alle parallelen Pfade aus, validieren Konkurrenz, belasten Speicherkohärenz und synchronisieren mit I/O-Transaktionen. Ergebnis: Systemweite funktionale Coverage übersteigt routinemäßig 90 %, weit über traditionellen Ansätzen.
Das Testgenerierungs-Tool – Test Suite Synthesis – nutzt ein klares, graphenbasiertes Szenariomodell, das das beabsichtigte Designverhalten kapselt. Ingenieure können diese Modelle in nativem C++ mit dem Accellera Portable Stimulus Standard oder visuell erstellen, was herkömmlichen Chip-Datenflussdiagrammen entspricht, die während Design-Diskussionen auf Whiteboards skizziert werden.
Jedes Modell kapselt Stimuli, Checks, Coverage-Metriken und Debug-Daten, wodurch dem Generator alle Informationen zur Verfügung stehen, um hochwertige, selbstprüfende C-Tests zu erzeugen, die jeden Designaspekt ausüben. Hierarchische, modulare Modelle ermöglichen die Wiederverwendung von Block-Level-Tests in vollständigen SoC-Modellen und das Teilen über Teams und Projekte hinweg. Das Synthesis-Tool zerlegt ein einzelnes Intent-Modell in parallele Tests über Threads und I/O-Ports hinweg, wodurch enge Synchronisation gewährleistet wird.
Vorteile der Test Suite Synthesis
Ein zentraler Vorteil ist die Möglichkeit, Coverage-Ziele auf Intent-Modell-Ebene festzulegen. Nach der Spezifikation des Intents analysiert das Tool dieses, um die benötigte Anzahl an Testfällen und die erwartete funktionale Coverage zu schätzen.
In einem typischen SoC können tausende Tests generiert werden. Durch Constraints auf den Intent können Ingenieure spezifische Coverage-Ziele anvisieren und das Tool auf kritische Bereiche konzentrieren. Dies eliminiert den mühsamen iterativen Zyklus aus Testsetzung, Verifikationslauf, Coverage-Bewertung und Neukonfiguration.
Eine Fallstudie an einem großen SoC eines führenden Halbleiterherstellers zeigte eine 80 %ige Reduktion der Testkompositionszeit im Vergleich zu handgeschriebenen Tests. Automatisierung erzeugte rigorosere Fälle und steigerte die Coverage von 84 % auf 97 %. Die Modelle erwiesen sich als portierbar über Umgebungen hinweg.
Ein einzelnes Intent-Modell kann Testfälle für virtuelle Plattformen, RTL-Simulation, Emulation, FPGA-Prototypen oder sogar den gefertigten Chip während der Post-Silicon-Validierung erzeugen.
Debugging bleibt ein großer Zeitfresser auf SoC-Ebene. Wenn ein Test einen Defekt aufdeckt, müssen Ingenieure den Fehler zurück zum auslösenden Test und dem zugrundeliegenden Szenariomodell verfolgen. Durch Korrelation jedes Testfalls mit seiner Graphenrepräsentation ermöglichen modulare, selbstenthaltene Tests schnelle Isolierung und Analyse von Bugs.
Anwendungsszenarien
Synthetisierte Testfälle können realistische Use-Case-Szenarien antreiben. Betrachten wir beispielsweise den Digitalkamera-SoC aus Abbildung 1.
Die Block-Level-Komponenten des SoC umfassen zwei Prozessoren, Peripheriegeräte und Speicher. Ein vereinfachter Graph unter dem Blockdiagramm veranschaulicht die High-Level-Pfade für die Verifikation. Ein Szenario – der obere Pfad – liest ein JPEG von einer SD-Karte, leitet es über einen Speicherbereich an den Fotoprozessor, transformiert das Bild für die Anzeige, lädt es in einen zweiten Speicherblock und sendet es schließlich an den Display-Controller. Jeder High-Level-Block ist hierarchisch und enthält zahlreiche Aktionen und Entscheidungen.
Das Synthesis-Tool plant randomisierte Tests entsprechend. In einfachster Form führen Tests sequenziell in einem einzelnen Thread aus, wie illustriert. Die wahre Stärke zeigt sich, wenn das Tool Applikationen über mehrere Threads und Prozessoren hinweg interleaved, so viele parallele Instanzen wie das Design erlaubt ausführt und Speicher in komplexen Mustern alloziert. Eine alternative Ansicht in der Abbildung zeigt Tests, die über drei Threads verteilt sind und diverse Speicherbereiche nutzen.
Während die Illustration hochlevelig ist, flacht das Synthesis-Tool den hierarchischen Graphen tatsächlich in tausende Aktionen und Verbindungen ab, die randomisierte Entscheidungen durch einen Solver-Algorithmus einbeziehen. Während der Graph durchlaufen wird, analysieren KI-Planungsalgorithmen gewünschte Outputs und verfeinern Input-Tests für optimale Ausrichtung. Das Tool stellt auch OS-ähnliche Services bereit – Speicherallokation, Adressmap-Zugriff, Interrupt-Handling – um vollständige Teststrukturen zu unterstützen, plant Tests dann randomisiert und alloziert entsprechend Speicher und Ressourcen.
Fazit
Genau wie Constrained-Random-Testbenches manuellen Aufwand aus der Blockverifikation entfernten, hat synthetisierter Testcontent für Embedded-Prozessor-SoCs bewiesen, den System-Level-Verifikationsaufwand zu reduzieren. Der Ansatz erstreckt sich nun auf Block-Level-Verifikation und Post-Silicon-Validierung. Automatisierte C-Tests verkörpern das Prinzip „automatisiere wann immer möglich“, liefern dramatische Coverage-Gewinne und komprimierte Verifikationszeitpläne.
Eingebettet
- ST Microelectronics zeigt 28 nm FD-SOI MCUs mit Embedded PCM für Powertrain, ADAS und Electrification
- Analog Devices zeigt KI, Industrial Networking und Power Solutions auf Embedded World 2019
- GIGAIPC IoT Innovations Showcase auf Embedded World 2019
- Cervoz Ultra-Dünne M.2 NVMe SSDs: High-Performance Storage für Industrial Edge Anwendungen
- Keysight stellt fortschrittliches N5511A Phase Noise Test System für Aerospace, Defense und 5G Design vor
- ST & YouTransactor lancieren PCI-sicheren SoC für 50.000+ Mobile Payment Terminals
- UltraSoCs Bus Sentinel: Real-Time Hardware IP Sicherung von SoC Bus Transaktionen
- IBASE CMI300-988: Ultra-kompaktes Mini-ITX PC mit AMD Ryzen Embedded V1807B
- Axiomtek launcht Fanless eBOX100-51R-FL: Ultra-Kompaktes, Intel-Powered Edge Computing Solution
- Eingebettete Systeme & Systemintegration: Moderne Architektur & Konnektivität