The structured application of advanced logging techniques for SystemVerilog testbench debug and analysis. By Bindesh Patel and Amanda Hsiao.

Similar documents
Use, Analysis, and Debug of SystemVerilog Assertions

Introduction to Functional Verification. Niels Burkhardt

Embedded Software development Process and Tools: Lesson-1

DO-254 Requirements Traceability

A Real Time, Object Oriented Fieldbus Management System

Introduction to Embedded Systems. Software Update Problem

A standards-based approach to application integration

BY STEVE BROWN, CADENCE DESIGN SYSTEMS AND MICHEL GENARD, VIRTUTECH

Novas Software, Inc. Introduction. Goal. PART I: Original Technology Donation 1. Data Dump Reader

Instrumentation Software Profiling

F-16 Modular Mission Computer Application Software

Automating Root-Cause Analysis to Reduce Time to Find Bugs by Up to 50%

WebSphere Business Modeler

Software Visualization Tools for Component Reuse

Case Study: ICICI BANK INTERNAL AUDIT DEPARTMENT PENTANA AUDIT WORK SYSTEM IMPLEMENTATION

Software Requirement Specification for Web Based Integrated Development Environment. DEVCLOUD Web Based Integrated Development Environment.

Firewall Builder Architecture Overview

JAVA Technologies QUARTER 1 DESKTOP APPLICATIONS - ESSENTIALS QUARTER 2 NETWORKING AND OPERATING SYSTEMS ESSENTIALS. Module 1 - Office Applications

PHP Code Design. The data structure of a relational database can be represented with a Data Model diagram, also called an Entity-Relation diagram.

Best Practises for LabVIEW FPGA Design Flow. uk.ni.com ireland.ni.com

Real-time Debugging using GDB Tracepoints and other Eclipse features

Software Engineering. Software Processes. Based on Software Engineering, 7 th Edition by Ian Sommerville

Testhouse Training Portfolio

A QUICK OVERVIEW OF THE OMNeT++ IDE

SIS Functional Design 15 minutes

Getting off the ground when creating an RVM test-bench

Discovery Visual Environment User Guide

Evaluating OO-CASE tools: OO research meets practice

Software Version 10.0d Mentor Graphics Corporation All rights reserved.

An Automated Development Process for Interlocking Software that. Cuts Costs and Provides Improved Methods for Checking Quality.

Generative Drafting. Page DASSAULT SYSTEMES. IBM Product Lifecycle Management Solutions / Dassault Systemes

Fundamentals of Java Programming

Q N X S O F T W A R E D E V E L O P M E N T P L A T F O R M v Steps to Developing a QNX Program Quickstart Guide

ReqXChanger Closing the Gap between Requirements and Modelling

Sage 300 ERP Intelligence Reporting Getting Started Guide. Debra Holder March 2014

How To Develop Software

Questions? Assignment. Techniques for Gathering Requirements. Gathering and Analysing Requirements

A Methodology for the Development of New Telecommunications Services

An Eclipse Plug-In for Visualizing Java Code Dependencies on Relational Databases

No.1 IT Online training institute from Hyderabad URL: sriramtechnologies.com

Visualization methods for patent data

To introduce software process models To describe three generic process models and when they may be used

Oracle SQL Developer for Database Developers. An Oracle White Paper September 2008

SQL Server 2012 Business Intelligence Boot Camp

Programming with the Dev C++ IDE

Rules and Business Rules

IndustrialIT System 800xA Engineering

Model Driven Interoperability through Semantic Annotations using SoaML and ODM

Reusable Knowledge-based Components for Building Software. Applications: A Knowledge Modelling Approach

10 STEPS TO YOUR FIRST QNX PROGRAM. QUICKSTART GUIDE Second Edition

Expanding Uniformance. Driving Digital Intelligence through Unified Data, Analytics, and Visualization

Managing Documents with SharePoint 2010 and Office 2010

Monitoring, Tracing, Debugging (Under Construction)

PIE. Internal Structure

Programming Languages

A process-driven methodological approach for the design of telecommunications management systems

Identity and Access Management Integration with PowerBroker. Providing Complete Visibility and Auditing of Identities

Digitale Signalverarbeitung mit FPGA (DSF) Soft Core Prozessor NIOS II Stand Mai Jens Onno Krah

What is a life cycle model?

Real Time Embedded Software Development Using Agile Technology An Experience Report

Chapter 5. Regression Testing of Web-Components

Unit Testing webmethods Integrations using JUnit Practicing TDD for EAI projects

BUSINESS RULES CONCEPTS... 2 BUSINESS RULE ENGINE ARCHITECTURE By using the RETE Algorithm Benefits of RETE Algorithm...

Work Process Management

An Oracle White Paper October Oracle Data Integrator 12c New Features Overview

Unified Data Integration Across Big Data Platforms

White Paper. Unified Data Integration Across Big Data Platforms

Data processing goes big

Windchill Service Information Manager Curriculum Guide

Karunya University Dept. of Information Technology

Kirsten Sinclair SyntheSys Systems Engineers

3D Animation of Java Program Execution for Teaching Object Oriented Concepts

Veritas Enterprise Vault for Microsoft Exchange Server

ATV Data Link Simulator: A Development based on a CCSDS Layers Framework

CHAPTER 1 - JAVA EE OVERVIEW FOR ADMINISTRATORS

effective performance monitoring in SAP environments

For Introduction to Java Programming, 5E By Y. Daniel Liang

SOFTWARE TESTING TRAINING COURSES CONTENTS

New Generation of Software Development

Building an Embedded Processor System on a Xilinx Zync FPGA (Profiling): A Tutorial

Evaluation of Adaptive Course Construction Toolkit (ACCT)

Implementing and Maintaining Microsoft SQL Server 2008 Integration Services

ANDROID DEVELOPER TOOLS TRAINING GTC Sébastien Dominé, NVIDIA

Cost-effective supply chains: Optimizing product development through integrated design and sourcing

Software Engineering Best Practices. Christian Hartshorne Field Engineer Daniel Thomas Internal Sales Engineer

AQA GCSE in Computer Science Computer Science Microsoft IT Academy Mapping

Colligo Manager 6.0. Offline Mode - User Guide

Secure cloud access system using JAR ABSTRACT:

Expert PHP 5 Tools. Proven enterprise development tools and best practices for designing, coding, testing, and deploying PHP applications.

IBM Operational Decision Manager Version 8 Release 5. Getting Started with Business Rules

Chapter 1. Introduction to ios Development. Objectives: Touch on the history of ios and the devices that support this operating system.

WebSphere ESB Best Practices

Pathways to Digital Growth

Engineering Process Software Qualities Software Architectural Design

Transcription:

Logging makes sense for testbench debug The structured application of advanced logging techniques for SystemVerilog testbench debug and analysis. By Bindesh Patel and Amanda Hsiao. SystemVerilog provides a compelling way to address the verification complexity challenge not simply as a new language for describing complex structures, but also as a platform for driving a more efficient and realistic test of the design. It is no surprise, then, that the adoption of the language for verification purposes has been rapid. However, there is a gap when it comes to the debug and analysis of SystemVerilog testbench code. The accepted dumpvars based techniques are not practical for the software like object oriented testbench code and their benefits in this realm are also questionable. At the end of the day, engineers do need to know what the testbench is doing at any given point in time. Thus far, engineers have been forced to revert to low level, text based message logging and subsequent manual analysis of the resulting text log files. Structured message logging and advanced visualisation techniques Logging the process of recording history has been widely used in systems and software environments and most SystemVerilog libraries in use today provide some utilities for logging information from the testbench to low-level text files that can be analysed after simulation. Engineers then correlate manually the testbench data to the design activity along the time axis. This is a painfully low-tech process with inherent disparity in the design and testbench debug flows, in which the visualisation tool is often vi or emacs. However, an automated logging system level task is available that not only captures messages, but also captures severities and variable states as properties or attributes of the message. It also captures the call stack for use later in debug. Since all data goes into the same debug database as the one used for HDL recording, the logged information can be visualised alongside other data, such as HDL value change and assertion states. Additionally, advanced visualisation techniques allow engineers to observe what is going on in the environment in standard waveforms or specialised applications such as time synchronised table (spreadsheet like) views which can be filtered, configured and so on. Special purpose features, such as advanced filtering and highlighting, can be used to identify or colour specific messages based on some condition (or to quickly find matches based on user specified search criteria). The automatic capture of the call stack during logging provides opportunities for further automating debug. For example, a logged message can be synchronised with the source code using drag and drop from the waveform to the source code, which could then jump to where the message originated. It can also be used to quickly set breakpoints at the right place to drive interactive simulation from the debug environment as discussed in the next section.

Logging to interactive link While logging provides a coarse, high level view of testbench activity, interactive simulation of testbenches provides the GDB like data that is occasionally required to understand behaviour, including the values of variables at a specified point in time and detailed thread information. By bridging the ability to log messages with an integrated design testbench debug flow, engineers can effectively use logging at the outset to determine the testbench code (location and time) that needs to be analysed in more detail. The ability to drive interactive testbench simulation from the debug environment allows for more user friendly set up, visualisation and analysis of the behaviour of the design, the testbench message logs and the testbench itself all in the same environment. Strategies employed in the software domain can help engineers meet the challenges of testbench verification and debug. It is clear that simply extending the traditional hardware debug techniques to testbench debug is not sufficient or even feasible. Gaining insight into what is going on in the testbench during simulation requires a new approach that builds upon the logging and interactive concepts previously discussed. The key is to make the logging process more sophisticated and automated so that most of the debug and analysis of testbench activity can be done at that level. The goal is to use an advanced logging mechanism to pinpoint the location of a problem. If the problem is identified as being on the testbench side and more details are needed, engineers would then go into a tightly integrated interactive mode. Logging done properly Logging has been widely used in systems and software. For example, operating systems log information all the time for later analysis and debug if needed. Similarly, most software systems log information. So it is no surprise that logging is a key pillar in SystemVerilog testbench debug and analysis. Today s dominant SystemVerilog methodologies provide some basic libraries that enable users to log information from their testbench. However, the problem has been in visualising that information, whether instrumented using raw SVTB syntax, like $display and printf, or using specialised base classes. All logging done through these mechanisms typically ends up in text files. In order to make debug of the design and testbench together a practical, efficient process, the logging mechanism must be flexible in terms of usage and the resulting output automatically captured in the same debug database as the design results (such as the de facto standard FSDB format). This is fundamental to enabling advanced visualisation, debug and analysis functionality. The proposed flow and usage are shown in Figure 1.

Figure 1: A flow based on logging user instrumented information into FSDB database accessed by Springsoft s Verdi Automated Debug and Siloti Visibility Automation systems. The task to log information for example $fsdblog needs to be flexible, allowing engineers to insert it anywhere in their code, including existing base class libraries that are intended for logging. The logging task must not only capture messages, but also severities, variable states and so on, as properties or attributes of the message. In addition, the call stack must be captured automatically for use in further debug automation. The upside of this approach is that, since all the data goes into the same debug database as the one used for HDL recording, visualisation support can be added to the debug system to analyse this logged information alongside other data, such as HDL value change and assertion states. The net result is a unified system that enables engineers to observe what is going on in the entire environment. The data is visualised in standard waveforms, as well as through specialised applications such as a time synchronised table view which, like a spreadsheet, can be filtered and configured. Special purpose features can be added to these views to help engineers identify messages of interest among the logged data. Building bridges The automatic capture of the call stack during logging provides opportunities for further automating debug. For example, a logged message can be synchronised with the source code using drag-and-drop from the waveform to the source code, which could then jump to where the message originated. In addition to the obvious comprehension advantages of this capability, it can also be used to quickly set breakpoints at the right place to drive interactive simulation from the debugger.

to interactive Interactive simulation is often the only mechanism available for delving into the details of testbench code. While logging can provide a coarse high level view of testbench activity, interactive simulation of testbenches can provide the GDB-like data that is required to understand their behaviour, such as the values of variables at a specified point in time and detailed thread information. Most simulators, when invoked in interactive mode, typically have access to all this information, albeit in a more primitive manner. By bridging the ability to log messages with a unified design testbench debug system, engineers can effectively use logging at the outset to determine the testbench code (location and time) that needs to be analysed in more detail. With such a flow (shown in Figure 2), a logged message can be dragged and dropped into the source code view so engineers can set a breakpoint, then invoke interactive simulation in the background with the source code view of the debugger serving as the master cockpit. In this way, engineers can drive the simulator to a specific time or breakpoint, so that values, call stacks, and thread information can be inspected (automatically or user-driven). This mode of operation is very similar to the GDB use model deployed by C/C++ programmers. Figure 2: The use of a unified and full-featured debug system to drive interactive testbench simulation can allow for more user friendly set up and visualisation and analysis of results.

There are several compelling advantages of using the debugger to drive the simulator and display its results. Engineers can use the same environment to debug and analyse the behaviour of the design as well as the testbench message logs. Additionally, debug environments provide a more user friendly and familiar environment to drive, view, and analyse the testbench itself. For example, as shown in Figure 2, having variable watch and stack views alongside the source code can greatly enhance the user experience when debugging testbench code.. and comprehension The task of understanding the structure and function of such complex testbenches can be daunting. Debuggers have always excelled at providing a platform for comprehending HDL source code. Commonly used features, such as design browsing with an instance based hierarchical representation and tracing of loads and drivers, are built upon a knowledge database that is automatically extracted from the source code. While some of this same functionality can be extended to testbench code, the more exciting opportunity lies in building on this knowledge driven foundation to take testbench comprehension even further. Again, many of the ideas proposed here take advantage of practices that have already proven to be successful in the software domain. Design code is typically built hierarchically with lower level modules instantiated at higher levels and some modules instantiated multiple times. Conceptually, this can be represented in a tree like fashion from the top level module all the way down to the lower level modules. Testbench code however, like C++ and other object oriented languages, is primarily made up of declarations of classes, functions and variables. During testbench debug and analysis, engineers want a quick way to navigate to a class, function, variable or the newer SystemVerilog constraint and coverage code. Debug and analysis tools have to be able to import this type of code and display a meaningful representation that takes into account the declaration centric nature of testbench code (see Figure 3). This hierarchical representation must also be linked to the actual source code so that when a class, function or other entity is selected, the corresponding source code is also displayed.

Figure 3: An instance based hierarchy representation and UML like class inheritance and relationship view are critical to SystemVerilog testbench code comprehension. Given the object oriented nature of SVTB code, engineers can easily reuse existing code and create reusable code themselves. Classes are often derived from existing base or parent classes. This inheritance allows them to retain all the capabilities of the parent while at the same time allowing for variables or functions to be replaced with new ones, or entirely new ones to be added. While declaration based views can be enhanced to show some class hierarchy, most classes have complex relationships with other classes, particularly as engineers understandably take advantage of SVTB object orientedness (or reusability) in its purest sense. To represent this organic nature of classes, the concept of UML class diagrams can be borrowed from the software world. Author profiles: Bindesh Patel and Amanda Hsiao are with Springsoft (www.springsoft.com)