Introducing IEEE 1800

Transcription

Introducing IEEE 1800.2The Next Step for UVMThomas Alsop - Intel Corp.Srivatsa Vasudevan - Synopsys, Inc.Mark Glasser - NVIDIA CorporationSrinivasan Venkataramanan - CVC Pvt., Ltd.Krishna Thottempudi - Qualcomm, Inc.

Tutorial Introductions Introduction to UVM – Tom Alsop 1800.2 UVM – Srivatsa Vasudevan– Changes from Accellera UVM, additions, clarifications– Details on compatibility issues for engineers updating VIPto 1800.2 1800.2 UVM – Mark Glasser– TLM clean-up, register package clean-up UVM for Designers – Srini Venkataramanan andKrishna Thottempudi2

Agenda 1800.2Approved!Brief history leading up to 1800.2Why standardize a verification methodology?UVM milestonesUVM ownershipWhat changed in UVM for the IEEE standard?Post IEEE 1800.2 effortsTutorial introsBackward compatibility discussionQ&A3

Why Standardization Was Needed Verification Intellectual Property (VIP) growing exponentiallySoC development begins to dominate the industryIP-Reuse and sharing is an absolute requirementSharing VIP requires interoperability of componentsThe industry could not afford huge amounts of time andresources consumed converting one form of VIP toanother and in training on different methods used tocreate and use the VIP ‒ i.e., major lost!! IEEE 1800 specification (SystemVerilog) is becoming the nextlanguage of choice for design and validation. It’s standardizedbut there is still no standard for using its VIP.4

Verification Libraries Evolve as WellPre-VMAVMeRMConfigCommStimulusPhasingAPI BasedDirectRefPath-Based ConfigTLM1API BasedStandardPhasingRALReportReporting ficiencyCustomPhasingSchedulerVendor RALsStandard RALFast ReportMacrosReportObject/Cbk5

Standardization UVM had 3 major Accellera releases (1.0, 1.1, and 1.2) It has had many bug ‘fix only’ releases It has been welcomed by JEITA (Asia/Japan) standardsbody IEEE PAR submitted and accepted by DASC in 2015 UVM completed the IEEE standardization process in early2017– Approved by IEEE SASB in February 2017– Will be published as IEEE 1800.2 Standard for UVM later in 2017– There is no other verification methodology in the IEEE UVM is going to be around a very long time 6

UVM MilestonesMilestoneDateResultKey PointsOVM/VMMInteroperabilityJuly 2009Best Practices Documentand Library for doinginteroperability betweenOVM and VMM Simulators supporting multiple base classes First joint library development on an Accellera TSC Strong team (Collaboration, Speed, Quality, Best in Industry)UVM 1.0 EAMay 2010User & Reference Guide,BCL Library Starting point OVM 2.1.1 Key features: callbacks, end-of-test and message catching Documentation type selection UVM/VMM interoperability library used for transitioningUVM 1.0February2011User & Reference Guide,BCL Library Registers, Phasing and TLM Resources, Cmdline Numerous other features Infrastructure is being developed using the UVM 1.0 EA versionUVM 1.1 (a-d)June 2011to March2013User & Reference Guide,BCL Library Focus to stabilize and increase adoption 60 high-priority bug fixes Clean API spec with no errata 1.1a – 1.1d all bug fixes to BCL over 18 month timeframeUVM 1.2June 2014User & Reference Guide,BCL Library Phase-aware Sequences Message/Debug System Revamp New API and semantic changesIEEE 1800.2-2017February2017IEEE specification Non-standard worthy (non-user) APIs dropped Many accessors added for property/data interface TLM and Registers minor improvements Overall cleanup and clarity of ambiguities7

Who Owns UVM?Standard /LRMUVM1.*. 20141800.2 WGLibrary2016.8

UVM Ownership IEEE 1800.2 WG––––1800.2 SV focusedDefines UVM functional API (not an implementation)Produces 1800.2 LRMAllows for multiple implementations Accellera WG– Delivers UVM Library (SV) Reference Implementationmatching 1800.2 LRM– Provide bug fixes for UVM library9

IEEE 1800.2 – What Changed? APIs were dropped– Non-user APIs – only used by the BCL, not by end users– Non-standard APIs – example or reference APIs, but not needed forstandardization– Examples: DAP, uvm comparator, uvm utils, etc New APIs were added– New accessors– Extendibility – things were added to allow debug to attach to them, or toextend functionality that was previously unavailable– Examples: uvm init, uvm runtest callback, etc. Minor TLM cleanup – renamed as UVM to avoid scoping issuesRegister improvements“User Guide” material removed. It’s not standard-worthy.Overall upgrade to remove ambiguities and clarify the specification10

Post IEEE 1800.2 Efforts Accellera UVM WG owns the implementation Restarted in Dec’16 Discussions ongoing concerning effort– Very deep discussions WRT to backward compatibility– Migration options from previous versions– Scoping out the effort, detailing changes, timelines The Accellera effort will ultimately determine:– What types of changes do users need to make to ensure backwardscompatibility?– What is the overall guidance? What needs to change?– Once you make the changes with the VIP, what are the implications?– Can it be used in the old ENV?– Does it have to be used with a new UVM IEEE/Accellera implementationrelease?11

Contribution Options Accellera WG– For Accellera members – Thurs @ 9AM PST call– Tracking via accellera.mantishub.com UVM IEEE 1800.2 WG (Work completed late 2016)– For IEEE members – Every other week @ 9AM PST call– Tracking via accellera.mantishub.com P1800.212

IEEE and Backward Compatibility Many meetings discussing backward compatibility The issues were broken out into 5 categoriesconsisting of 8 specific questions:–––––BCL compliance to the IEEE 1800.2 specImplementation artifacts & additive but non-IEEE APIsDeprecation policy and roadmapRemoval of pre-1.2 deprecated codeAPIs that changed from 1.2 to IEEE13

Thank You!

Changes from Accellera UVM,Additions & ClarificationsSrivatsa Vasudevanon behalf of UVM Working Group

Agenda Highlighting P1800.2 enhancements over UVM 1.2IEEE UVM effort overviewPolicy for Copy/Compare/Print/RecordFactory enhancementsComponent enhancementsCallback enhancementsOther minor enhancements/changes2

IEEE UVM Effort Effort made by UVM WG to ensure backward compatibility Focus on making the library easier to use/maintain/enhance– Accessor methods instead of fields– Removing implementation artifacts to not over-constraint future implementations– Provide more flexibility No need to use macros for some functionality Factory enablement of classes– Making API more uniform Documented API for classes and methods– Which were present in 1.2 but not in the documentation– Allow anyone to build an UVM library– There are no “secret sauce” methods. Everything uses documented API. Debug hooks are NOT mentioned in the IEEE LRM– More efficient methods can be provided by vendors/others3

UVM WG Reference Implementation Reference implementation from UVM WG– Contain the UVM IEEE API with classes & methods– Contain additional useful API not in P1800.2– Will remove deprecated code that is pre- UVM 1.2 Users may use linting or other solutions to ensurethat their code is compliant to UVM 1800.2 API4

Icons Used in this PresentationMethod was present in UVM 1.2Was not documented earlier, now documented in P1800.2Usually an internal functionApproach taken is different from UVM 1.2Make a note of this versus UVM 1.2 for compatibilityNEW42New in IEEE 1800.24 state variable in UVM 1.2 2 state variable in IEEE5

Policy Classes

UVM Policy Classes Every operation (Copy/Compare/Print/Pack/Record) now has a policy classUniformity across all operationsvirtual class uvm policy ‒ base class for all policiesUVM 1.2 had the following policy classes–––– P 1800.2 changes them a little–––– Printer ‒ virtual class uvm printerComparer ‒ virtual class uvm comparerPacker ‒ virtual class uvm packerRecorder ‒ virtual class uvm recorderPrinter ‒ virtual class uvm printer extends uvm policyComparer ‒ virtual class uvm comparer extends uvm policyPacker ‒ virtual class uvm packer extends uvm policyRecorder ‒ virtual class uvm recorder extends uvm policyExtensible &factoryenabledNEWPolicy Classes have a state. You can flush the state of the policy in the middle of thesimulation.7

uvm policyvirtual class uvm policy extends from uvm object Generic extension mechanism allows the user to pass additional informationObjects may use these extensions to alter their interactions with the policy– An object may use extensions to selectively filter some of its fields/methodsUser can simply apply a different printer or compare “policy” to change how an object isprinted or compared–– NEWFactory enabledCallback mechanism provided via do execute op() methodA number of accessor methods provided–––––––––virtual function bit extension exists( uvm object wrapper ext type )virtual function int unsigned get active object depth()virtual function uvm object get active object()virtual function uvm object get extension( uvm object wrapper ext type )virtual function uvm object pop active object()virtual function uvm object set extension( uvm object extension )virtual function void clear extension( uvm object wrapper ext type )virtual function void clear extensions()virtual function void push active object( uvm object obj )Allows youto tailorcapabilities8

UVM PACKER Class uvm packer extends uvm policy– uvm packer used to add a null terminating byte 0 to bitstream after packingstrings– Incompatible with streaming operatorsTo support streaming requires the uvm packer to pack/unpack strings in the samemanner as bitstream operatorsExample: You couldn’t do this in UVM 1.2Pack:bits { { size, my string with [0 : size]}};Unpack:{ { size, my string with [0 : size]}} bits; use metadata is not mentioned in LRM. You can have a pack/unpack operation aslong as the packer/unpacker understand each other.NEW9

uvm copier Copy() operation did not have a policy before Signature of copy() has changed– function void copy ( uvm object rhs, uvm copier copier null ) Class uvm copier extends uvm policy– Provides recursion state within the copier– Allows you to apply different recursion policies by setting default copierstatic function uvm copier get default()static function void set default ( uvm copier copier )virtual function uvm recursion policy enum get recursion policy()virtual function void copy object ( uvm object lhs, uvm object rhs )virtual function void set recursion policy (uvm recursion policy enum policy)backwardcompatible extensibleNEW10

Example Copying in UVM P1800.2What the policy classes buy youclass class B extends uvm object;// basic datatypesrand int par int;rand byte par address;string par string;Method provided to not breakbackward compatibility of do copy// Some objects to demonstrate the copy recursion policyclass A cl1; // UVM SHALLOWclass A cl3; // UVM DEEP function void do copy(uvm object rhs);class B rhs ;uvm copier copier;super.do copy(rhs); cast(rhs ,rhs);par int rhs .par int;par address rhs .par address;par string rhs .par string; cast(copier, get active policy())copier.copy object(this.cl1 rhs.cl1);endfunctionendclassRecursion policy is availableCapability/flexibilityboost1) You can add extensions2) The copier class is also factory enabled3) You could NOT do this before11

uvm comparer Virtual class comparer extends uvm policy UVM 1.2 allowed you to set comparer variablesdirectly P1800.2 provides you accessor methods Backward compatibleNEWEase ofuse12

uvm comparerUVM 1.2P1800.2class custom comparer extends uvm comparer;int unsigned show max 1;.endclasscustom comparer cc new; cc.set show max(0);custom comparer cc new; cc.show max 0;Capability/flexibility boostfrom policyAccessor Methodsvirtual function int unsigned get show max()NEWvirtual function int unsigned get threshold()virtual function int unsigned get verbosity()virtual function string get miscompares()virtual function uvm recursion policy enum get recursion policy()virtual function uvm severity get severity()virtual function void flush()virtual function void set check type (bit enabled)virtual function void set recursion policy (uvm recursion policy enum policy)virtual function void set severity (uvm severity severity)virtual function void set show max (int unsigned show max)virtual function void set threshold (int unsigned threshold)virtual function void set verbosity (int unsigned verbosity)13

uvm printer Virtual class uvm printer extends uvm policy Base class for other printer types Allows you to set the default printer– static function void set default (uvm printer printer)– static function uvm printer get default() Note that the default Printer Cannot be NULL in P1800.2– Change from UVM 1.2 UVM Printer knobs is modified from UVM 1.2 Accessor methods are providedFunctionality is provided in the base classWill be backward compatibleRelevant settings moved into each specific printerNEWSimpler andeasy to use14

Replacement for UVM Printer Knobs Knobs are broken up to have settings as per relevant printers A number of methods have been made a part of the uvm printer class These are accessor methods for settings in UVM printer knobsvirtual function void set begin elements (int elements 5)virtual function void set default radix (uvm radix enum radix)virtual function void set end elements (int elements 5)virtual function void set file (UVM FILE fl)virtual function void set id enabled (bit enabled)virtual function void set line prefix (string prefix)virtual function void set max depth (int depth)virtual function void set name enabled (bit enabled)virtual function void set radix enabled (bit enabled)virtual function void set radix string (uvm radix enum radix, string prefix)virtual function void set recursion policy (uvm recursion policy enum policy)virtual function void set root enabled (bit enabled)virtual function void set size enabled (bit enabled)virtual function void set type name enabled (bit enabled)NEW15

uvm line printer Portion of the printer knobs relevant to the line printer are in this class– static function uvm line printer get default()– static function void set default (uvm line printer printer)– virtual function string get separators()NEW– virtual function void set separators (string separators)UVM 1.2uvm line printer local line printer new;P1800.2uvm line printer local line printer new;simple packet pkt new("simple packet live");simple packet pkt new("simple packet live");initial beginpkt.randomize();pkt.print();uvm default printer uvm default line printer;pkt.print();local line printer.knobs.seperators “ “;pkt.print(local line printer);endinitial beginpkt.randomize();pkt.print();local line printer.set default();pkt.print();local line printer.set seperators(“ “);pkt.print(local line printer);endEasier touse/customize16

uvm table printer Portion of the printer knobs relevant to the table printer are in this class– static function uvm table printer get default() static function void set default (uvm table printer printer) virtual function int get indent() virtual function void set indent (int indent)UVM 1.2uvm table printer local table printer new;P1800.2uvm table printer local table printer new;simple packet pkt new("simple packet live");simple packet pkt new("simple packet live");initial beginpkt.randomize();pkt.print();uvm default printer uvm default table printer;pkt.print();local table printer.knobs.indent 20;pkt.print(local table printer);endinitial beginpkt.randomize();local table printer.set default();pkt.print();local table printer.set indent(20);pkt.print(local table printer);endNEWEase ofuse17

uvm tree printer Portion of the printer knobs relevant to the tree printer are in this class– static function void set default (uvm tree printer printer)– virtual function int get indent()– virtual function string get separators()– virtual function void set indent (int indent)– virtual function void set separators (string separators)NEWUVM 1.2uvm tree printer local tree printer new;P1800.2uvm table printer local tree printer new;simple packet pkt new("simple packet live");simple packet pkt new("simple packet live");initial beginpkt.randomize();pkt.print();uvm default printer uvm default tree printer;pkt.print();local tree printer.knobs.indent 20;pkt.print(local tree printer);endinitial beginpkt.randomize();local tree printer.set default();pkt.print();local tree printer.set indent(20);pkt.print(local tree printer);endEase ofuse18

uvm recorder P1800.22 Changes4– function int get handle()– static function uvm recorder get recorder from handle( int id )UVM 1.2– function integer get handle()– static function uvm recorder get recorder from handle(integer id)New Methods added– virtual function bit get id enabled()– virtual function int get record attribute handle()– virtual function uvm policy::recursion state e object recorded( uvm object value,uvm recursion policy enum recursion )– virtual function uvm radix enum get default radix()– virtual function uvm recursion policy enum get recursion policy()– virtual function void flush()– virtual function void set default radix (uvm radix enum radix)NEW– virtual function void set id enabled (bit enabled)– virtual function void set recursion policy (uvm recursion policy enum policy)19

Essential Operations Summary UVM policy classes have gone through a revamp– Backward compatibility has been considered extensively– Accessors provided for uniformity– Classes use a policy– You can not set policy classes to null ‒ Change from earlier behavior– There is a default to ensure backward compatibility– You can make changes in flight in a simulation. Things aren’t hard-coded.– uvm packer has reset– uvm printer has flush– uvm comparer has a flush– uvm recorder has a free() methodField macros have documented methods– Most of the methods were “secret sauce” in earlier UVM versions– They now use Methods now documented in LRMUVM flags are documented– UVM FLAGS is a typeNEW20

UVM Factory

UVM Factory UVM additionally supports registration of abstract objects andcomponents with the factoryNEW Two new classes to support this functionality– class uvm abstract object registry #(type T uvm object,string Tname "unknown ") extends uvm object wrapper– class uvm abstract component registry #(typeT uvm component, string Tname "unknown ")22

UVM FactoryAdded––pure virtual function void set type alias(string alias type name, uvm object wrapper original type)pure virtual function void set inst alias(string alias type name, uvm object wrapper original type,string full inst path);NEWDocumented––––pure virtual function uvm object wrapper find wrapper by name ( string type name )virtual function bit is type name registered (string type name);virtual function bit is type registered (uvm object wrapper obj);pure virtual function uvm object wrapper find wrapper by name ( string type name )23

UVM Factory Many classes in UVM were not factory enabled in 1.2 Shortcoming addressed in P1800.2– All classes derived from uvm object are factory enabledunless otherwise explicitly mentioned in LRM. Remember that since many more objects are registered with thefactory, you may see more class types/overrides than UVM 1.2 Ability to have abstract classes Additional API24

UVM Component

uvm componentfunction apply config settings() implicitly called during thebuild phaseNo way to turn it offNEWP1800.2 introduces a new methodvirtual function bit use automatic config() Default implementation returns 1 If you wish to disable the automatic call toapply config settings() this method needs to be overloadedto return a 0 in derived classes.26

UVM Object

uvm objectfunction bit compare (uvm object rhs, uvm comparer comparer null)function void copy ( uvm object rhs, uvm copier copier null )function bit compare ( uvm object rhs, uvm comparer comparer null )New Methodsstatic function bit get uvm seeding()static function void set uvm seeding (bit enable)NEWWill get defaultpoliciesIn P1800.2 are notNULLAll objects extended from uvm object are factory enabled by default.28

Base Classesuvm transaction41800.22Changesfunction int begin child tr ( time begin time 0, int parent handle 0 )function int begin tr ( time begin time 0 )function int get transaction id()function int get tr handle()UVM 1.2function integer begin child tr ( time begin time 0, integer parent handle 0 )function integer begin tr ( time begin time 0 )function integer get transaction id()function integer get tr handle()29

UVM Comparator Not mentioned in P1800.2– uvm comparator– uvm algorithmic comparator– uvm in order comparator30

UVM Reporting

uvm report objectUVM 1.2virtual function void uvm report error( string id, string message, int verbosity UVM LOW, stringfilename "", int line 0, string context name "", bit report enabled checked 0)P1800.2virtual function void uvm report error(string id, string message, int verbosity UVM NONE, stringfilename "", int line 0, string context name "", bit report enabled checked 0 )Changed:Errorsreportedindependentof verbosityvirtual function void uvm report(uvm severity severity, string id, string message, int verbosity (severity uvm severity'(UVM ERROR)) ? UVM NONE : (severity uvm severity'(UVM FATAL)) ? UVM NONE : UVM MEDIUM,string filename "", int line 0,string context name "", bit report enabled checked 0)32

uvm report objectuvm action is of a specific type ‒ was defined as int in 1.2Methods impacted:function void set report severity action ( uvm severity severity, uvm actionaction )function void set report id action ( string id, uvm action action )function void set report severity id action ( uvm severity severity, string id,uvm action action)33

uvm report server UVM 1.2pure virtual function void report summarize(UVM FILE file 0) P1800.2UVM FILE is a type in P1800.2pure virtual function void report summarize( UVM FILE file UVM STDOUT )Backwardcompatibleunless youchoose tochange34

uvm report catcherpure virtual function action e catch() returns an enum, not anint in P1800.2 Debug functionality is not mentioned in P1800.2 UVM WG will provide an compatible implementation Users/Vendors can provide their own extensions for debug if needed35

UVM Callbacks

Callbacks Callback classes in P1800 now extend from uvm callback– uvm callback extends from uvm object.UVM 1.2– virtual class uvm event callback#( type T uvm object ) extends uvm objectP1800.2– virtual class uvm event callback#( type T uvm object ) extendsuvm callbackNot documented in UVM 1.2; now documented in P1800.2– class uvm callback iter#(type T uvm object, type CB uvm callback ) function CB first() function CB get cb() function CB last() function CB next() function CB prev() function new( T obj )37

Sequence Macros Many uvm do macros in UVM 1.2 Macro is redefined in P1800.2 uvm do(SEQ OR ITEM, SEQR get sequencer(), PRIORITY 1, CONSTRAINTS {})Easy touse/remember38

UVM WG Reference Implementation Reference implementation from UVM WG– Contain the UVM IEEE API with classes & methods– Contain additional useful API not in P1800.2– Will remove deprecated code that is pre-UVM 1.2– Code that is semantically incompatible with UVM 1.2 Users can use linting or other solutions to ensure that theircode is compliant to UVM 1800.2 API39

Thank You!

TLM and Register Updatefor IEEE 1800.2Mark Glasser, NVIDIAon behalf of UVM Working Group

TLM Transaction-level Modeling Library in UVM Collection of interfaces and channels forcommunicating transactions Based on IEEE-1666 SystemC/TLM standard2

TLM Mantis ItemsIDSummary5391uvm tlm time::decr() missing default value for parameter5613D3 section 12.1 Overview needs to be rewritten5591Explicit methods definition instead of using uvm * port/export/imp5619uvm tlm * socket needs clarification on attributes and allowable connectivity5590Missing APIs for UVM TLM15588Class uvm tlm if base #(T1,T2) missing5496get peek export gives reference to get more info, but no info is there5392Master Mantis for TLM issues5592TLM naming in LRM5589Name inconsistencies between UVM TLM1 and SystemC TLM-15586Move uvm sqr if base #(REQ,RSP) from TLM to sequencer section3

TLM Consistency Make method names consistent with SystemCTLM– Maintain consistency?– Or break backward compatibility Decision: not break backward compatibility4

TLM Naming “UVM TLM” Disconnect UVM implementation from SystemCimplementation Cannot have two things called “TLM” as IEEEstandards Maintain provenance5

Registers

Focus of UVMREG WG Review and address current limitations and usemodel gaps– System level and/or dynamic address map applications– Limitations or missing capabilities with current use models Align uvm reg with other standards (e.g., IP-XACT) Review and improve documentation Backward compatibility7

IEEE 1800.2 Changes No major change affecting backward compatibilityLRM/Documentation enhanced and clarifiedAddressed system level/dynamic use modelsFurther alignment with IP-XACT deferred forbackward compatibility reasons8

Reg Model Unlock Allows to unlock and re-lock a‘locked’registermodel Allows to restructure and rebuild addressinghierarchy Minimal infrastructure to accomplish systemlevel/dynamic scenarios– Changing addressing/visibility at runtime– Additional and compatible to current infrastructure9

Registers in the FactoryClass Name12131416172123uvm reg blockuvm reguvm reg fileuvm vreg field cbsuvm reg backdooruvm reg read only cbsuvm reg write only cbsP1800.2VirtualNoNoNoYesYesYesYesUVM 1.2YesYesYesNoNoNoNo Classes that were formerly virtual are no longer uvm object utils added to these classes These classes are now “factory ready”10

Thank You!

UVM for RTL DesignersSrinivasan Venkataramanan, VerifWorksKrishna Thottempudi, Qualcomm

Agenda UVM Journey so far– Typical RTL designer’s verification requirements Go2UVM test layer Signal Access API(Force/Deposit/Release) Register verification– Simple approach– VIP approach Testing Reset propagation & clock controller Waves2UVM Bridging RTL Designers’ UVM to Verification team’s UVM2

UVM – Fastest Growing Methodology Source: Independent survey by Wilson group– Sponsored by Mentor Graphics3

UVM is Complex, But.4

Typical UVM ArchitectureDUT5

UVM Mechanics Multiple layers of components Hierarchical component hook-ups– uvm component::new (string name,uvm component parent) UVM macros to automate lot offeatures Phasing (reset phase, main phase,run phase, etc.) Objection mechanism (a must in UVMto get even a simple stimulus throughto the DUT)6

Need to Simplify UVM Not all engineers are familiar with full UVM RTL designers need simple tests– Simple wire wiggling– Force/Deposit/Release for corner cases– Register access tests using UVM reg-model Several auto-generated tests need a simple testingframework– Direct wire toggling– Waves2UVM, etc., DFT7

Verilog’s display Standard messaging in Verilog Pros:– Most used debug technique– Simple usage, familiar to all display (“Hello World!”) Cons:––––No built-in timeNo file/line informationNo control over verbosityNo severity information display (“%t %s %0dDriven addr: 0x%0hdata: 0x%0h”, time, FILE , LINE ,x0.adddr, x0.data)8

Standard UVM Messaging UVM provides functions & macros– uvm info (ID, MSG, VERBOSITY)– uvm error (ID, MSG) Pros:– Versatile, powerful– Flexible formatting Cons:– First timers don’t appreciate ID usage– Seasoned users ID get name()– VERBOSITY Default value would be handy!9

Simplified UVM Display g2u display Simplified macros around standard UVMmessaging API g2u display(MSG, VERBOSITY UVM MEDIUM) uvm info(get name(), MSG, VERBOSITY) g2u display (“Hello World!”) g2u display (“Found a match!”,UVM HIGH)YY g2u display ( sformatf(“Drivenaddr: 0x%0h data: 0x%0h”,x0.adddr, x0.data)ID default ,VERBOSITY UVM MEDIUMID default ,VERBOSITY UVM HIGHID default ,VERBOSITY UVM MEDIUM10

What is Go2UVM? SystemVerilog package TCL “apps” to auto-create Go2UVM files Package on top of standard UVM framework– A minimal subset Messaging same as uvm info– Simplified versions available as well Test from uvm test base class Phasing (Active)– Main Phase – mandatory– Reset Phase – optional, recommended Objections mechanism– Automated, users don’t have to bother Test PASS/FAIL declaration– Automated11

What’s Inside VW Go2UVM Package? Wrapper around UVM test layer Hides phasing completely from users– Uses main phase – mandatory (User fillsmain())– reset phase optional (User fills reset() ) Leverages on “pure virtual” to guard againstmisuse Internally handles objections– A must in UVM– Big time saver for first time UVM users12

Simple FIFO Design Sanity checks by RTLengineers Provide a UVM test layer fullwith task-based APIs push– task reset()– task main() Go2UVM test layerdata inclkrst npopemptydata out– Hides complexity– Skips several layers13

Go2UVM Test for a FIFOimport uvm pkg::*; include "vw go2uvm macros.svh"// Import Go2UVM Packageimport vw go2uvm pkg::*;// Use the base class provided by thevw go2uvm pkg G2U TEST BEGIN(fifo test)// Create a handle to the actual interface G2U GET VIF(fifo if)task reset(); g2u display ("Start of reset")this.vif.cb.rst n 1'b0;repeat (5)@(this.vif.cb);this.vif.cb.rst n 1'b1;repeat (1)@(this.vif.cb); g2u display ("End of reset")endtask : resetmain taskTestSV Interfacereset tasktask main (); g2u display ("Start of main")this.vif.cb.push 1'b1;this.vif.cb.data in 22;@(vif.cb);vif.cb.push 1'b0;repeat(5)@(this.vif.cb); g2u display ("End of main")endtask : main G2U TEST END14

Inside Go2UVMvirtual class go2uvm base test extends uvm test

IEEE and Backward Compatibility Many meetings discussing backward compatibility The issues were broken out into 5 categories consisting of 8 specific questions: – BCL compliance to the IEEE 1800.2 spec – Implementation artifacts & additive but non-IEEE APIs – Deprecatio