How to use DVT Log Viewer in VS Code
Overview
This video demonstrates the DVT Log Viewer for analyzing UVM simulation logs. It presents the main UI components and showcases filtering by severity, combining filter conditions, searching for specific content, navigating to source code, and synchronizing with the Waveform Viewer.
The video was made using DVT IDE version 26.1.6.
For query syntax details see: https://eda.amiq.com/documentation/eclipse/sv/toc/log-viewer/index.html#query-language
Details
The DVT Log Viewer is a powerful tool for simulation log analysis. It identifies structured entries such as UVM messages within the log and extracts attributes, like the timestamp, file and line, UVM component or message ID.
From the ground up, the Log Viewer was built with the performance required for real-life scenarios. It efficiently handles logs that typically reach hundreds of megabytes or even gigabytes without degradation. In this video, we work with a roughly 900 MB file.
Let's jump to the first message after simulation time starts.
Each text section of the log which matches a message template is shown as a collapsed entry.
On the left side of the Log Viewer, the annotation ruler displays warning, error and fatal icons
according to the entry severity.
Right next to it, the timeline ruler displays the simulation time,
with timestamps marking time changes highlighted in bold.
Use the scroll bar on the right side of the viewer to easily navigate through the log,
for example to quickly jump to the bottom and inspect the UVM Report Summary.
Filtering & Searching
You can use an intuitive query language to filter or search the log. Let's locate the error revealed by the UVM Report Summary.
You can combine multiple match clauses using boolean operators, for example to debug the transactions to a particular Control Status Register address.
By the way, you can also do a free text search, for example to investigate when a watchdog timer was started.
For more details about the query language, check the link in the video description.
For our next example, let's first clear the filter box to get all the entries of the log and then use the search box to look for the places where an address key is loaded or applied.
Use the arrows to navigate across matches.
Navigation & Integration
To provide an effective debugging experience, the Log Viewer integrates with other IDE functionalities. Let's filter only the messages printed by a specific monitor.
Next, we double click on a simulation time from the timeline ruler to set the Waveform Viewer primary cursor.
Click on the monitor which invoked the UVM reporting macro to jump to its definition. Or simply click the filename link to jump directly to the UVM reporting macro call. Note how the Verification Breadcrumb keeps track of the monitor's path in the elaborated hierarchy.
Now let's navigate to the virtual interface clocking block, right click and add all its ports to the waveform. In the Waveform Viewer canvas we right click to add a secondary cursor where the bus activity we're interested in ends, and then click the Jump to Time in Log Viewer button. This automatically fills in the search box to reveal all the log messages printed between the primary and secondary cursors.
Note that the Verification Hierarchy should be elaborated with the same test and arguments as the simulator invocation that produced the logfile. Otherwise, for example due to differing factory overrides, UVM component instances in the log may not exist in the Verification Hierarchy.
Configuration & Management
At any time you can check in the status bar which log file is currently associated with your project. Simply click the button to reveal the viewer. When opening a log file, it is automatically set as the current log for your project, but you can also manually control the current log from the main menu.
From the menu you can also configure the applicable message templates, for example activate templates according to the tools in use and even define custom templates tailored to your own message and logging methodology.