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



Similar documents
Use, Analysis, and Debug of SystemVerilog Assertions

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

Binary Search Trees (BST)

Introduction to Functional Verification. Niels Burkhardt

Linux Driver Devices. Why, When, Which, How?

CS 2112 Spring Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions

Memory Allocation. Static Allocation. Dynamic Allocation. Memory Management. Dynamic Allocation. Dynamic Storage Allocation

Hierarchy storage in Tachyon.

Virtuozzo Virtualization SDK

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

MAX = 5 Current = 0 'This will declare an array with 5 elements. Inserting a Value onto the Stack (Push)

Getting off the ground when creating an RVM test-bench

Simple Network Management Protocol

1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++

Analog Monitoring Tool AMT 0.3b User Manual

Common Data Structures

Binary Search Trees. A Generic Tree. Binary Trees. Nodes in a binary search tree ( B-S-T) are of the form. P parent. Key. Satellite data L R

Unified Coverage Interoperability Standard (UCIS)

Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition

Glossary of Object Oriented Terms

Lecture 2 CS An example of a middleware service: DNS Domain Name System

Software Version 10.0d Mentor Graphics Corporation All rights reserved.

PicoScope 5000 Series (A API)

ModelSim-Altera Software Simulation User Guide

A binary search tree or BST is a binary tree that is either empty or in which the data element of each node has a key, and:

10CS35: Data Structures Using C

8.1 Min Degree Spanning Tree

RTAP Database Lifecycle Management

Fast Arithmetic Coding (FastAC) Implementations

Bigdata High Availability (HA) Architecture

(Refer Slide Time: 1:17-1:40 min)

1 Abstract Data Types Information Hiding

Hypertable Architecture Overview

VHDL Test Bench Tutorial

Binary Heaps * * * * * * * / / \ / \ / \ / \ / \ * * * * * * * * * * * / / \ / \ / / \ / \ * * * * * * * * * *

TLM-2.0 in Action: An Example-based Approach to Transaction-level Modeling and the New World of Model Interoperability

Operating Systems CSE 410, Spring File Management. Stephen Wagner Michigan State University

DATA STRUCTURES USING C

Lecture 10: Dynamic Memory Allocation 1: Into the jaws of malloc()

Optional custom API wrapper. C/C++ program. M program

The V8 JavaScript Engine

Early Hardware/Software Integration Using SystemC 2.0

Chapter 3: Restricted Structures Page 1

Big Data and Scripting. Part 4: Memory Hierarchies

1 First Steps. 1.1 Introduction

Output: struct treenode{ int data; struct treenode *left, *right; } struct treenode *tree_ptr;

USERV Auto Insurance Rule Model in Corticon

PeopleSoft Query Training

Raima Database Manager Version 14.0 In-memory Database Engine

Logistics. Software Testing. Logistics. Logistics. Plan for this week. Before we begin. Project. Final exam. Questions?

Application Note 120 Communicating Through the 1-Wire Master

RaneNote SNMP: SIMPLE? NETWORK MANAGEMENT PROTOCOL

Table of Contents. Overview...2. System Requirements...3. Hardware...3. Software...3. Loading and Unloading MIB's...3. Settings...

Technical paper review. Program visualization and explanation for novice C programmers by Matthew Heinsen Egan and Chris McDonald.

Deferred node-copying scheme for XQuery processors

MPLAB Harmony System Service Libraries Help

GCE Computing. COMP3 Problem Solving, Programming, Operating Systems, Databases and Networking Report on the Examination.

Using XACML Policies as OAuth Scope

Project No. 2: Process Scheduling in Linux Submission due: April 28, 2014, 11:59pm

A Java-based system support for distributed applications on the Internet

Numbering of Signalling Point Codes

Data Structure with C

Memory Management Simulation Interactive Lab

Managing large sound databases using Mpeg7

SystemVerilog Is Getting Even Better!

White Paper. PiLab Technology Performance Test, Deep Queries. pilab.pl

The following themes form the major topics of this chapter: The terms and concepts related to trees (Section 5.2).

Load Balancing. Load Balancing 1 / 24

Stacks. Linear data structures

Using Eclipse CDT/PTP for Static Analysis

GDB Tutorial. A Walkthrough with Examples. CMSC Spring Last modified March 22, GDB Tutorial

CHAPTER 6: TECHNOLOGY

Data Tool Platform SQL Development Tools

estatistik.core: COLLECTING RAW DATA FROM ERP SYSTEMS

File Management. Chapter 12

FURTHER READING: As a preview for further reading, the following reference has been provided from the pages of the book below:

A Fast Algorithm For Finding Hamilton Cycles

About the File Manager 2

1 File Management. 1.1 Naming. COMP 242 Class Notes Section 6: File Management

Discovery Visual Environment User Guide

Lecture 12 Doubly Linked Lists (with Recursion)

Solution White Paper Connect Hadoop to the Enterprise

GenericServ, a Generic Server for Web Application Development

Financial Data Access with SQL, Excel & VBA

Operating Systems. Lecture 03. February 11, 2013

Hello and welcome to this presentation of the STM32L4 Firewall. It covers the main features of this system IP used to secure sensitive code and data.

CIS 631 Database Management Systems Sample Final Exam

The Principle of Translation Management Systems

Quiz 4 Solutions EECS 211: FUNDAMENTALS OF COMPUTER PROGRAMMING II. 1 Q u i z 4 S o l u t i o n s

A Mind Map Based Framework for Automated Software Log File Analysis

Jorix kernel: real-time scheduling

An Implementation Of Multiprocessor Linux

Software Testing A Time for Standard Models

DATA STRUCTURE - STACK

TREE BASIC TERMINOLOGIES

Ordered Lists and Binary Trees

Windows 7 Security Event Log Format

Pattern Insight Clone Detection

Microsoft Networks/OpenNET FILE SHARING PROTOCOL. INTEL Part Number Document Version 2.0. November 7, 1988

Transcription:

Novas Software, Inc Introduction SystemVerilog is both a design and verification language For this reason, VPI has been recently extended to handle coverage and assertion data, and there is a proposal to update it with the new data types and testbench facilities of SystemVerilog that are not covered in the original VPI The wealth of design and verification data access mechanisms in VPI makes it an ideal vehicle for tool integration VPI can potentially replace today's arcane, inefficient, and error-prone file based data exchanges with a new mechanism for tool interface likely enabling innovative flows A single access API eases the interoperability investments for both vendors and users Reducing interoperability barriers allows vendors to focus on tool enhancements by adding proprietary extensions Users, on the other hand, will be able to create integrated design flows from a multitude of best-in-class vendors spanning the realms of design and verification (eg simulators, debuggers, formal tools, coverage or testbench tools and so on) Goal The purpose of this donation is to enhance the SystemVerilog design data dumping facilities We propose to extend VPI with read/write dumping facilities so that it acts as an extended API for data access tool interaction irrespective of whether this data is in memory or a file (ie whether in host memory or in persistent form as in file) and also irrespective of the tool the user is interacting with To that end, Novas is donating several technology elements from its read/write API of the Novas proprietary dump format (Fast File Signal DataBase: FSDB) In the first part of this document we describe the original donation extracted from the FSDB reader/writer documentation In the second part we describe in brief how we propose to enhance the current VPI by merging the aforementioned ideas and facilities into it PART I: Original Technology Donation 1 Data Dump Reader The dump file may contain two kinds of information: 1) Design hierarchies: which include dumped scopes and variables (and their data types) and represents their inter-relationship This is sometimes referred to as the tree portion 2) Value changes: of the stored variables throughout the dump time ranges 1 Note that we primarily describe here the facilities that do not replicate any similar VPI functionality Where appropriate, we will point out the areas where VPI functionality exits and can be reused with a slight update (not discussed here) We will also where appropriate remove any Novas terminology and replace it with a generic form System Verilog 31a Donation Page 1 9/16/2003

Novas Software, Inc The Reader tells the application the design hierarchies via tree callback function The Reader tells the application the value changes via a Value-Change (VC) traverse handle, which provides many functions to traverse the value changes back and forth Note that after the design hierarchies have been traversed in a tree callback function, the Reader does not keep the design hierarchies with a well-defined data structure in memory; it is up to the application to keep this information Note that the application can create more than one value-change traverse handle for the same variable, thus providing different views of the value changes Each value-change traverse handle has an internal index, which is used to point to the current time and value change In fact, the value-change traverse is done by increasing or decreasing this internal index The Flow of Reading of the dump file is as follows: o Open the dump file o Traverse the design hierarchies o Select variables we are interested in o Load variables' value changes onto memory o Create value-change traverse handle for variables o Traverse the value changes via traverse functions o Close the dump file Opening/Closing the dump file, and traversing the design hierarchies are facilities already found in the VPI and will not be covered here 2 Load Variables' Value Changes onto Memory Once the variables (the application is interested in) have been selected (by addition to the LoadSignalList), the value changes of these variables are loaded onto memory by calling ddrloadsignals() Note that value changes of unselected variables are not loaded onto memory Traversing the Value Changes Traversing value changes is done via value-change traverse class defined by data dump Reader The class (ddrvctrvs) contains numerous member functions used to traverse the value changes back and forth In tree callback function, the application knows the vpihandle of each variable These handles are very important because when the application needs to traverse the value changes of a variable, the original handle is the key to create a value-change traverse object associated with it By supplying the vpi 2 As appropriate we will share our expertise as part of the committee work to update those mechanisms if needed System Verilog 31a Donation Page 2 9/16/2003

Novas Software, Inc handle, the application calls the API, ddrcreatevctrvshdl, to create a traverse object handle and points the pointer at it; such a handle is called a traverse handle After that, the application can call the member functions with that traverse handle, such as ddrgotoxtag, ddrgotonextvc, ddrgetvc, and so on, to traverse the value changes back and forth Here is a sample code segment ddrobject *obj; vpihandle var_handle; ddrvctrvshdl vc_trvs_hdl; byte_t *vc; unsigned64 time; vc_trvs_hdl = obj->ddrcreatevctraversehndl(var_idcode); vc_trvs_hdl->ddrgetminxtag((void*)&time); vc_trvs_hdl->ddrgotoxtag(&time); for ( ; ; ) { if (DD_RC_SUCCESS!= vc_trvs_hdl->ddrgotonextvc()) break; vc_trvs_hdl->ddrgetxtag((void*)&time); // Time of VC vc_trvs_hdl->ddrgetvc((void*)&vc); // VC data } The code segment creates a value-change (VC) traverse object associated with a variable, whose handle is represented by var_handle, and creates a traverse handle, vc_trvs_hdl With this traverse handle, it first calls ddrgetminxtag to query the minimum time where the value has changed, then it moves the internal index to that time by calling ddrgotoxtag; and, finally, it calls ddrgotonextvc to move the internal index forward repeatedly until there is no value change behind ddrgetxtag gets the actual time where this VC (data obtained by ddrgetvc) happens (note the hold value semantics between VCs for HDL variables in general, this is not the case for some other variables eg assertion variables See the Section on Jump Behavior for more details) The traverse handle is a pointer that points to a traverse object, and the value-changes are traversed via the member functions of the traverse object Here is a short description of each member functions More details are in the function list section o ddrgotoxtag: moves the internal index to the proper position, based on the time specified by the application o ddrgotoprevvc: moves the internal index to the previous time and value change o ddrgotonextvc: moves the internal index to the next time and value change o ddrgetxtag: returns the current time, based on the internal index o ddrgetvc: returns the current value change, based on the internal index o ddrgetminxtag: returns the minimum time where value change occurs o ddrgetmaxxtag: returns the maximum time where value change occurs o ddrhasincorevc: tell the application if this variable has value changes System Verilog 31a Donation Page 3 9/16/2003

Novas Software, Inc o ddrfree: is used to free the data structures of the traverse handle itself The value changes of the associated variable are not freed Jump Behavior Jump behavior refers to the behavior of ddrgotoxtag() The application specifies a time to which it would like to jump, but the specified time may or not have value changes Data Dump Reader will align the return time if necessary In Figure 1 below, the whole simulation run is from time 0 to time 65, and a variable has value change at time 0, 15 and 50 Figure 1 Jump Behavior Illustration If we create a value-change traverse handle associated with this variable and try to jump to a different time, the result will be determined as follows: o Jump to 10; return time is 0 o Jump to 15; return time is 15 o Jump to 65; return time is 50 o Jump to 30; return time is 15 o Jump to (-1); return time is 0 o Jump to 50; return time is 50 If the jump time has a value change, then the internal index of the traverse handle will point to that time Therefore, the return time is exactly the same as the jump time If the jump time does not have a value change, and if the jump time is not less than the minimum time of the whole trace 3 run, then the return time is aligned forward If the jump time is less than the minimum time, then the return time will be the minimum time Reader Function List NOTE: In the following ddvarhandle is any unique var handle it can be replaced by vpihandle ddrc ddrobject::ddraddtosignallist(ddvarhandle vh); Purpose: Add signal we are interested in to signal list The chosen scheme is based on variable handle since it identifies a unique signal vh: the var handle of the signal that application is interested in 3 The word trace can be replaced by simulation, we use trace here for generality since a dump file can be generated by several tools System Verilog 31a Donation Page 4 9/16/2003

Novas Software, Inc Example: ddobject -> ddraddtosignallist(handle); ddrc ddrobject::ddrresetsignallist(); Purpose: Reset signal list, ie empties signal list so that it contains no signals None Example: ddobject -> ddrresetsignallist(); bool_t ddrobject::ddrisinsignallist(ddvarhandle vh); Purpose: Check the signal to see if it is in signal list or not, while the signal is specified by its handle Var handle which identifies a signal TRUE if the signal is in signal list, FALSE otherwise Example: ddobject -> ddrisinsignallist(handle); ddrc ddrobject::ddrloadsignals(); Purpose: Load the value changes of the signals that are in signal list onto memory That means if a signal is not added into signal list, then ddrloadsignals won t load its value changes onto memory None Example: ddobject -> ddrloadsignals(); ddrc ddrobject::ddrunloadsignals(); Purpose: Unload the value changes of the signals from memory, which means all in-core value changes will be unloaded Note that signals have a reference count If a signal's reference count is not zero, its value changes will not be unloaded None Example: ddobject -> ddrunloadsignals(); ddrvctrvshdl ddrobject::ddrcreatevctrvshdl(ddvarhandle vh); Purpose: Create a traverse handle associated with the signal which is specified by its handle Application can traverse the value changes of the signal via its traverse handle, and there could be multiple traverse handles associated with a signal System Verilog 31a Donation Page 5 9/16/2003

Novas Software, Inc vh: the handle which identifies the signal Non-null if successful, null otherwise Example: vc_traverse_handle = ddobject -> ddrcreatevctrvshdl(handle); ddrc ddrvcvctrvs::ddrgotoxtag(unsigned64 *xtag); Purpose: Try to move value change traverse index to xtag, if there is no value change at xtag, then the value change traverse index is aligned based on the jump behavior defined by DD reader, and the xtag will be updated based on the aligned traverse index For details, please refer to DD reader document, look for jump behavior section If there is a value change occurring at xtag, then value change traverse index is move to that xtag *xtag: a pointer which represents the xtag where we want to go ddrc ddrvcvctrvs::ddrgetxtag(unsigned64 *ret_xtag); Purpose: Get xtag based on value change traverse index Usually, this API is called after ddrgotoxtag is made successfully *ret_xtag: a pointer representing returned xtag Example: vc_traverse_handle -> ddrgetxtag(&time); ddrc ddrvcvctrvs::ddrgetvc(byte_t **ret_vc); Purpose: Get value change based on value change traverse index **ret_vc: Pointer to pointer to byte_t representing the value change Example: vc_traverse_handle -> ddrgetvc(&vc_ptr); Note: You can get the value that is specially associated with an assertion variable (see IsAssertionVar) by using structure ddrassertionvarvalue 4 for example: struct ddrassertionvarvalue { unsigned64 begin_xtag; // begin time unsigned64 end_xtag; // end time str_t result; // result: success, failure, }; ddrc ddrvcvctrvs::ddrgotonextvc(); Purpose: Move value change traverse index to the next value change, if there is no value-change behind value change traverse index, then calling of this API will fail 4 This is just a placeholder the actual data will be that of the VPI variable of object type vpiassertion System Verilog 31a Donation Page 6 9/16/2003

Novas Software, Inc None Example: vc_traverse_handle -> ddrgotonextvc(); ddrc ddrvcvctrvs::ddrgotoprevvc(); Purpose: Move value change traverse index to the previous value change If there is no valuechange before value change traverse index, then the calling of this API will return fail None Example: vc_traverse_handle -> ddrgotoprevvc(); bool_t ddrvcvctrvs::ddrhasincorevc(); Purpose: Check the signal to see if it has value change or not Usually, this API is used when the data file is still growing or in processing None TRUE if the signal has value change, FALSE otherwise Example: vc_traverse_handle -> ddrhasincorevc(); ddrc ddrvcvctrvs::ddrgetminxtag(unsigned64 *ret_xtag); Purpose: Get the xtag of the first value change Since simulation xtag is in ascending order and the first value change of each signal might occur at different xtag, so ddrgetminxtag is used to get the xtag of the first value change, and the xtag would be the minimum one for that signal *ret_xtag: pointer representing the xtag of the first value change Example: vc_traverse_handle -> ddrgetminxtag(&time)) ddrc ddrvcvctrvs::ddrgetmaxxtag(unsigned64 *ret_xtag); Purpose: Get the xtag of the last value change Since the time xtag is in ascending order and usually the last value change of each signal occurs at different xtags, so ddrgetmaxxtag is used to get the xtag of the last value change, and the xtag would be the maximum one for that signal *ret_xtag: pointer representing the xtag of the first value change Example: vc_traverse_handle -> ddrgetmaxxtag(&time)) void ddrvcvctrvs::ddrfree(); System Verilog 31a Donation Page 7 9/16/2003

Novas Software, Inc Purpose: Free the value change traverse object When the traverse object is freed, the reference count of the signal it is associated with will be decremented by one Only when the reference count of a signal is zero could its value changes be unloaded by ddrobject::ddrunloadsignals() Hence it is import to free a traverse object when it is no longer in use Note that this routine does not free the value changes associated with the signal It just frees the traverse object itself User must call ddrobject::ddrunloadsignals() to actually unload a signal's value changes None None Example: vc_traverse_handle -> ddrfree(); bool_t ddrvcvctrvs::ddrisitassertionvar(); Purpose: Check to see if the var that the ddrvcvctrvs currently traversing is an assertion var or not none : TRUE if the signal is an assertion var FALSE otherwise Dump Data Writer A dump file may contain two kinds of information: design hierarchies, and value changes The design hierarchies include the hierarchies between each scope (design entity) and the variables that each scope holds The value changes are the waveform data Each value change includes a time and a value In order to write information into the dump file, Writer supports two kinds of creation mode: tree creation mode and value change creation mode Under tree creation mode, the application calls Writer APIs to create the design hierarchies, variables and their data types Under value change creation mode, the application creates the VC data A handle for a variable can be used to write out the data A variable may have more than one name ie an alias For example, a variable may be called bus in scope top, and data_bus in scope system But both bus and data_bus refer to the same variable that has a unique handle The application can create an alias to a variable by calling variable creation API with the different name but the same handle A dump file may contain none, one, or multiple design hierarchies The design hierarchy is like a multi-tree A node corresponds to a scope of the design hierarchy A scope can contain scopes and variables The capability that a scope can contain scopes recursively builds the design hierarchy In order to traverse the design hierarchy, we must introduce the current scope concept: meaning which node we are at now in the writing process Some of the tree creation APIs can move the current scope to another one so that the application can describe and build the design hierarchy The current scope also determines which scope the newly created variables belong to: if a variable is created, then it belongs to the current scope The writer is best built around a time-based scheme: the application stops at a specific time where value changes occurred, then it figures out what variables have value changes at that specific time Finally, it creates the System Verilog 31a Donation Page 8 9/16/2003

Novas Software, Inc value changes of those variables at that specific time The same steps repeat until it reaches the maximum time of the run The value change creation is composed of 2 steps: o Tag time creation o Value creation at that tag The time is created by calling ddwcreatexcoorbyhnl, while the value is created by calling ddwcreatevarvalbyhndl API Writer Function List bool_t ddwbegintree(ddwobject *obj); Purpose: Begin of tree creation and sets current scope to root scope *obj: Pointer to DD writer object TRUE on success; FALSE on failure void ddwendtree(ddwobject *obj); Purpose: End of tree creation It closes a tree creation void ddwcreatescope(ddwobject *obj, byte_t type, str_t name); Purpose: Create a sub-scope under current scope and then current scope goes to the newly created sub-scope *obj: Pointer to DD writer object type: Scope type name: Pointer to string which represents scope name none void ddwcreateupscope(ddwobject *obj); Purpose: Make current scope go to its parent scope *obj: Pointer to DD writer object none ddrc ddwcreatevarbyhndl(ddwobject *obj, ddwvardata *data); ddrc ddwcreateassertionvarbyhndl(ddwobject *obj, ddwassertionvardata *data); Purpose: Create a var by handle *obj: Pointer to DD writer object *data: A pointer to var data Return DD_RC_SUCCESS/FAIL System Verilog 31a Donation Page 9 9/16/2003

Novas Software, Inc void ddwcreatexcoorbyhnl(ddwobject *obj, unsigned64 time); Purpose: Create an xtag where a value change has occurred Time is a 64-bit unsigned integer *obj: Pointer to DD writer object time: 64-bit unsigned integer none System Verilog 31a Donation Page 10 9/16/2003

Novas Software, Inc PART II: How to Integrate into VPI Note: The assertion portion has already been partially integrated into the Assertion VPI extension Reader: The idea is to integrate into VPI using the same flavor and shape of the VPI routines So the donation routines will be added as new types and/or object properties into VPI instead of adding new methods So the integration outline is as follows 5 : o A new set of #define would be added to accommodate the new types or object properties o The VC traverse handle would be obtained appropriately from the original variable handle using vpi_handle() method o The time traversal APIs would be integrated as additions to vpi_control() eg Next, Prev and so on o The get APIs (value/current, min, or max time) would be added into the vpi_get(), and vpi_get_value() methods o Dump object or file would be obtained by extensions to the systfs as in extending $dumpvars/$readvars to get any special information (along the same strategy followed in Verilog 2001 for dump enhancements to Verilog) Writer: VPI already has the basic concept of Value Change callbacks; incorporating writer calls into those should accomplish the value change writing in a seamless way Conclusion In summary, we propose here a set of enhancements donated by Novas Software, Inc to Accellera as part of our continuing involvement in the SystemVerilog standardization effort We envision that by working closely with the other user and vendor members of the SV committees (SV-CC in particular) we will further improve SystemVerilog by adding a data dump component 5 Section 27 in the SystemVerilog 31 LRM on the Assertion API serves as a model of this strategy System Verilog 31a Donation Page 11 9/16/2003