Cogita wendet branchenübliche maschinelle Lernalgorithmen an. Signifikante Ergebnisse werden mit unbeaufsichtigten und teilüberwachten Algorithmen erzielt. Dabei werden Datensätze aus dem Log erstellt und die erste Fehlermeldung als Ausgangspunkt gesetzt. A-priori, k-nächste Nachbarn, Gaußscher naiver Bayes und Hauptkomponentenanalyse [3] werden bereits erfolgreich eingesetzt, um relevante Abfragen und Signale vorzuschlagen. (Unter Hervorhebung des relevanten Zeitpunkts, Cursorposition und Zoom) Eine Mindesterfolgsrate von 80% zeigt die Abfragefähigkeiten von Cogita.
Den Startpunkt stellt die Fehlermeldung:
# UVM_ERROR [write_host_axi_B_t] @ 3600.0ns: {hnvme_scoreboard.sv::5466} => Unexpected write resp!
Cogita analysiert diese und erstellt einen Datensatz aller Meldungen, einschließlich [write_host_axi_axi_B_t] als Emitter und "write resp" als Teil der Nachrichtensyntax. Dieser Datensatz zählt in der Regel zwischen fünf und zehn Dimensionen, basierend auf der Protokollsyntax der jeweiligen Umgebung. Er wird auf Muster und Anomalien hin analysiert. Cogita wird dann einige der folgenden Player vorschlagen, basierend auf Clustering-Algorithmen für den Datensatz:
Jeder Cogita-Player ist eine grafische Datendarstellung. Die Daten jedes Players sind eine Wertereihe, zeitlich veränderlicher numerischer Daten. Dies gilt auch für jeden Bus oder jedes Signal, das aus der VCD-Datei selbst abgeleitet wird.
Im Bereich der Statistik und der linearen Algebra, leiten viele gängige Manipulationen relevante Informationsdaten zur Auswertung ab. Solche Manipulationen können ein Derivat sein, um sich nur auf Änderungen zu fokussieren, oder ein log10, der sich auf den Trend und weniger auf absolute Werte konzentriert. Cogita ermöglicht es, für jeden Player Manipulationsschablonen anzufügen, die eine zusätzliche Verständnisebene darstellen.
Im folgenden Beispiel analysiert der Benutzer das Verhalten des Zugriffs auf DRAM-Adressen. Jeder DMA-Frame hat eine Basisadresse, etwa 0x3FE0_000000, mehrere Blöcke unter Verwendung einer festen Lücke und einer aufeinander folgenden Adresse in jedem Block. Bild 7 stellt den Player "as is" dar, d.h. die Schreibadresse über die Zeit.
Aufgrund des hohen Versatzes der Daten ist es im Test fast unmöglich, das Adressmuster zu erfassen. Der kleine Tropfen zu Beginn zeigt einen Fehler, aber ohne einzoomen ist dieser nicht zu erkennen, geschweige denn zu verstehen.
Bild 8 zeigt ein Derivat, das die Datentrends hervorhebt. Der hohe Peak zeigt den Adressverlust bei dieser Manipulation deutlich an. Darüber hinaus werden Übergänge zwischen den Blöcken durch die kleineren Peaks verfolgt, die über die rosa Linie auffallen.
In vielen Debug-Techniken kann die einfache Reduzierung von ein oder zwei Datendimensionen zu einer klaren Darstellung führen, die einen Fehler sofort aufzeigt. Beispielsweise kann der Ingenieur während des Zeitscreenings, an einer Reihe von Werten des RTL-Busses oder einer Prüfstandsvariablen interessiert sein.
Der Versuch, die Bussignale an Ein- und Ausgang des Prüflings in einer Standardwellenformansicht zu vergleichen, kann sich als sehr schwierig erweisen. Ein Signalabgleich oder eine Zeitverschiebung erhöht die Sichtbarkeit nicht.
Cogita adaptiert hier die Eingangs- und Ausgangsdaten als Liste, wodurch die Zeitdimension reduziert wird (Bild 9). Auf diese Weise werden die Unterschiede sofort erfasst.