package uvm_svid_monitor_package; import uvm_pkg::*; // //svid_transmit_packet_configuration

Similar documents
Getting Started with UVM. Agenda

Easy migration between frameworks using UVM Multi- Language (UVM-ML) Dr. Mike Bartley, Test and Verification Solutions

UVM Rapid Adoption: A Practical Subset of UVM. Stuart Sutherland, Sutherland-HDL, Inc. Tom Fitzpatrick, Mentor Graphics Corp.

Easier UVM Functional Verification for Mainstream Designers

Easier UVM Making Verification Methodology More Productive. John Aynsley, Dr David Long, Doulos

SVA in a UVM Class-based Environment by Ben Cohen, author, consultant, and trainer

5 Developing Acceleratable Universal Verification Components (UVCs)

User Experience with UVM

Practical Experience in Automatic Functional Coverage Convergence and Reusable Collection Infrastructure in UVM

The Verification Future needs an Easier UVM

UVM Rapid Adoption: A Practical Subset of UVM

Self- Tuning Coverage

Hiding the Guts by Ray Salemi, Senior Verification Consultant, Mentor Graphics

Slicing Through the UVM's Red Tape A Frustrated User's Survival Guide

Monitors, Monitors Everywhere Who Is Monitoring the Monitors

e/erm to SystemVerilog/UVM

UVM Ready: Transitioning Mixed-Signal Verification Environments to Universal Verification Methodology

My Testbench Used to Break! Now it Bends: Adapting to Changing Design Configurations

Practical experience in automatic functional coverage convergence and reusable collection infrastructure in UVM verification

An Introduction to the Next Generation Verification Language Vlang. Puneet Goel Sumit Adhikari

Constrained Random Data Generation Using SystemVerilog

Please! Can someone make UVM easy to use?

Making the most of SystemVerilog and UVM: Hints and Tips for new users

OVERVIEW: ============================================================ REPLACE

Getting Started with OVM 2.0

Small, Maintainable Tests

A Beginner's Guide to Using SystemC TLM-2.0 IP with UVM

Configuring a Date with a Model

A Generic UVM Scoreboard by Jacob Andersen, CTO, Kevin Seffensen, Consultant and UVM Specialist, Peter Jensen, Managing Director, SyoSil ApS

Design and Verification of Slave Block in Ethernet Management Interface using UVM

OVM/UVM Update. Universal Verification Methodology. Open Verification Methodology. Tom Fitzpatrick Verification Technologist Mentor Graphics Corp.

Easier UVM for Functional Verification by Mainstream Users

Three Steps to Unified SoC Design and Verification by Shabtay Matalon and Mark Peryer, Mentor Graphics

Seven Separate Sequence Styles Speed Stimulus Scenarios

Verification Prowess with the UVM Harness

SystemVerilog Functional Coverage

UVM Tips and Tricks - Runtime Tips

166 SystemVerilog Assertions Handbook, 4th Edition

SystemC Standardization Update Including UVM for SystemC Introduction to the Universal Verification Methodology in SystemC

Advancing system-level verification using UVM in SystemC

Effective SystemVerilog Functional Coverage: design and coding recommendations

Error Injection in a Subsystem Level Constrained Random UVM Testbench

A New Class Of Registers

Advancing system-level verification using UVM in SystemC

February 24-26, 2009

Verification Prowess with the UVM Harness

Yet Another Memory Manager (YAMM)

SystemVerilog Virtual Classes, Methods, Interfaces and Their Use in Verification and UVM

Next Generation Design and Verification Today UVM REG: Path Towards Coverage Automation in AMS Simulations

Accellera Systems Initiative SystemC Standards Update

Development of UVM based Reusabe Verification Environment for SHA-3 Cryptographic Core

I Didn t Know Constraints Could Do That!

SystemVerilog 3.1: It s What The DAVEs In Your Company Asked For

The Design and Verification of a Synchronous First-In First-Out (FIFO) Module Using System Verilog Based Universal Verification Methodology (UVM)

UVM Verification Framework

Slaying the UVM Reuse Dragon Issues and Strategies for Achieving UVM Reuse

An Introduction to Universal Verification Methodology

Creating Stimulus and Stimulating Creativity:

Perplexing Parameter Permutation Problems? Immunize Your Testbench

No RTL Yet? No Problem UVM Testing a SystemVerilog Fabric Model

UCIS APPLICATIONS: IMPROVING VERIFICATION PRODUCTIVITY, SIMULATION THROUGHPUT, AND COVERAGE CLOSURE PROCESS

IP for the Era of FinFET and Smart Designs. From Silicon to Software: A Quick Guide to Securing IoT Edge Devices. Customer Spotlight

Sunburst Design - SystemVerilog UVM Verification Training by Recognized Verilog & SystemVerilog Guru, Cliff Cummings of Sunburst Design, Inc.

You will also need to download the source code for this tutorial from the same location as this PDF file on

Automated Generation of Functional Coverage Metrics for Input Stimulus by Mike Andrews, Verification Technologist, Mentor Graphics

Chapter 5 Copyright 2012 G. Tumbush, C. Spear v1.2

Stick a fork in It: Applications for SystemVerilog Dynamic Processes. Doug Smith and David Long Doulos

Defining UVM Coverage in IDesignSpec Sandeep Thakur Agnisys Support Team

Use the Sequence, Luke

UVM Ready: Transitioning Mixed-Signal Verification Environments to Universal Verification Methodology

Vertical Reuse of functional verification from subsystem to SoC level (with seamless SoC emulation)

UVM based Verification Environment for Performance Evaluation of DDR4 SDRAM using Memory Controller

Slicing Through the UVM s Red Tape

Fast Track to Productivity Using Questa Verification IP by David Aerne and Ankur Jain, Verification Technologists, Mentor Graphics

AMS System-Level Verification and Validation using UVM in SystemC and SystemC-AMS: Automotive Use Cases

The Communication and Customization Mechanisms in OVM and UVM

Verification of AHB Protocol using UVM

UVM hardware assisted acceleration with FPGA co-emulation

Stitching UVM Testbenches into Integration-Level

UVM for VHDL. Fast-track Verilog for VHDL Users. Cont.

Yikes! Why is My SystemVerilog Still So Slooooow?

Multi-Stream Scenarios Enhancing Stimulus Generation in the VMM

Interconnect Shared Cache

Figure 5. HDL BFM interface with HVL proxy class

Applying Stimulus & Sampling Outputs UVM Verification Testing Techniques

The Top Most Common SystemVerilog Constrained Random Gotchas

Universal Verification Methodology (UVM) 10:05am 10:45am Sharon Rosenberg UVM Concepts and Architecture

Design and Verification of a 16-bit RISC Processor using Universal Verification Methodology (UVM)

VMM PRIMER. Using the Register Abstraction Layer. Author(s): Janick Bergeron. Updated By: John Choi. Brett Kobernat. Version 1.

UVM Tips & Tricks. By: Shankar Arora. Logic Fruit Technologies. White Paper

UVM usage for selective dynamic re-configuration of complex designs

AMCAT Automata Coding Sample Questions And Answers

Boost Verification Results by Bridging the Hardware/Software Testbench Gap

Verilog: The Next Generation Accellera s SystemVerilog Standard

Beyond UVM Registers Better, Faster, Smarter

CSE 591: Advanced Hardware Design Professor: Kyle Gilsdorf

Asynchronous Serial Communication Protocol (without Flow Control) using TLM 2.0 (Example of Non memory based protocol )

INF5430. SystemVerilog for Verification. Chapter Randomization

Modeling Usable & Reusable Transactors in SystemVerilog Janick Bergeron, Scientist

Introduction to Digital VLSI Design מבוא לתכנון VLSI ספרתי

Transcription:

`include "uvm_macros.svh" package uvm_svid_monitor_package; import uvm_pkg::*; //---------------------------------------------------------- //svid_transmit_packet_configuration //---------------------------------------------------------- class svid_transmit_packet_configuration extends uvm_object; `uvm_object_utils( svid_transmit_packet_configuration ) function new( string name = "" ); super.new( name ); endclass // svid_transmit_packet_configuration //svid transmit packet class; class svid_transmit_packet extends uvm_sequence_item; typedef enum bit [2:0] {IDLE,SET_VID_FAST, SET_VID_SLOW, SET_VID_DECAY, SET_PS, GET_REG} svid_cmd; typedef enum int {LOOP0, LOOP1} svid_loop; typedef enum bit [2:0] {INVALID0, INVALID1, START_FRAME, END_FRAME, INVALID2, INVALID3, INVALID4, INVALID5 } frame_limiter; //Frame specific parmeters frame_limiter start_frame; svid_loop addr; svid_cmd command; bit [7:0] payload; bit parity; frame_limiter end_frame; function new(string name=" "); super.new(name); endfunction // new `uvm_object_utils_begin(svid_transmit_packet) `uvm_field_enum( frame_limiter, start_frame, UVM_ALL_ON ) `uvm_field_enum( svid_cmd, command, UVM_ALL_ON ) `uvm_field_enum( svid_loop, addr, UVM_ALL_ON ) `uvm_field_int( payload, UVM_ALL_ON ) `uvm_field_int( parity, UVM_ALL_ON ) `uvm_field_enum( frame_limiter, end_frame, UVM_ALL_ON ) `uvm_object_utils_end endclass // svid_transmit_packet

//svid transmission monitor; this monitor retrives the packet //from the ingress interface and put it to the analysis port class svid_transmit_packet_monitor extends uvm_monitor; `uvm_component_utils(svid_transmit_packet_monitor) uvm_analysis_port #(svid_transmit_packet) svid_ap; virtual svid_packet_intf ingress_intf; //from wired interface function void build_phase(uvm_phase phase); void'(uvm_resource_db#(virtual svid_packet_intf )::read_by_name(.scope("ifs"),.name("svid_packet_intf_ingress"),.val(ingress_intf))); svid_ap = new(.name( "svid_ap" ),.parent( this ) ); endfunction // build_phase task run_phase(uvm_phase phase); forever begin svid_transmit_packet svid_packet; @ingress_intf.cb_out; if(ingress_intf.cb_out.command!= svid_transmit_packet::idle)begin svid_packet = svid_transmit_packet::type_id::create(.name("svid_packet")); svid_packet.start_frame = svid_transmit_packet::frame_limiter'(ingress_intf.cb_out.start_frame); svid_packet.addr = svid_transmit_packet::svid_loop'(ingress_intf.cb_out.addr); svid_packet.command = svid_transmit_packet::svid_cmd'(ingress_intf.cb_out.command); svid_packet.payload = ingress_intf.cb_out.payload; svid_packet.parity = ingress_intf.cb_out.parity; svid_packet.end_frame = svid_transmit_packet::frame_limiter'(ingress_intf.cb_out.end_frame); svid_ap.write(svid_packet); end end // forever begin endtask // run_phase endclass // svid_transmit_packet_monitor //svid agent; instantiates sequencer (NOT), monitor and driver class svid_transmit_packet_agent extends uvm_agent; `uvm_component_utils(svid_transmit_packet_agent) uvm_analysis_port#(svid_transmit_packet) svid_ap; virtual svid_packet_intf ingress_intf; //from DUT

svid_transmit_packet_monitor packet_monitor; svid_ap = new(.name( "svid_ap" ),.parent( this ) ); packet_monitor = svid_transmit_packet_monitor::type_id::create(.name( "packet_monitor" ),.parent( this ) ); endfunction // build_phase function void connect_phase(uvm_phase phase); packet_monitor.ingress_intf = ingress_intf; packet_monitor.svid_ap.connect(svid_ap); endfunction // connect_phase endclass // svid_transmit_packet_agent //svid_functional_coverage_subscriber class svid_functional_coverage_subscriber extends uvm_subscriber#(svid_transmit_packet); `uvm_component_utils(svid_functional_coverage_subscriber) svid_transmit_packet svid_packet; covergroup svid_packet_cg; start_frame_cp: coverpoint svid_packet.start_frame; addr_cp: coverpoint svid_packet.addr; command_cp: coverpoint svid_packet.command; end_frame_cp: coverpoint svid_packet.end_frame; endgroup // svid_packet_cg svid_packet_cg = new; endfunction // new function void write(svid_transmit_packet t); svid_packet = t; svid_packet_cg.sample(); endfunction // write endclass // svid_functional_coverage_subscriber // svid_scoreboard_subscriber typedef class svid_packet_scoreboard;

class svid_packet_scoreboard_subscriber extends uvm_subscriber#(svid_transmit_packet); `uvm_component_utils(svid_packet_scoreboard_subscriber) function void write( svid_transmit_packet t ); svid_packet_scoreboard svid_packet_sb; $cast( svid_packet_sb, m_parent ); svid_packet_sb.check_svid_packet( t ); endfunction: write endclass: jelly_bean_sb_subscriber // svid_scoreboard class svid_packet_scoreboard extends uvm_scoreboard; `uvm_component_utils( svid_packet_scoreboard ) uvm_analysis_export#( svid_transmit_packet ) svid_packet_analysis_export; local svid_packet_scoreboard_subscriber svid_packet_sub; svid_packet_analysis_export = new(.name( "svid_packet_analysis_export" ),.parent( this ) ); svid_packet_sub = svid_packet_scoreboard_subscriber::type_id::create(.name( "svid_packet_sub" ),.parent( this ) ); endfunction: build_phase function void connect_phase( uvm_phase phase ); svid_packet_analysis_export.connect( svid_packet_sub.analysis_export ); endfunction: connect_phase virtual function void check_svid_packet(svid_transmit_packet t); /////////////////////////////////////////////////////////////////// //Put in the packet checking mechanism here!!!! /////////////////////////////////////////////////////////////////// endfunction

endclass // svid_packet_scoreboard // svid_packet_checking_environment -- Putting it all together!!! class svid_packet_checking_env extends uvm_env; `uvm_component_utils(svid_packet_checking_env) svid_transmit_packet_agent svid_agent; //sequencer, driver and monitor svid_functional_coverage_subscriber svid_fc_sub; svid_packet_scoreboard svid_sb; virtual svid_packet_intf ingress_intf; svid_agent = svid_transmit_packet_agent::type_id::create(.name( "svid_agent" ),.parent( this ) ); svid_fc_sub = svid_functional_coverage_subscriber::type_id::create(.name( "svid_fc_sub" ),.parent( this ) ); svid_sb = svid_packet_scoreboard::type_id::create(.name( "svid_sb" ),.parent( this ) ); endfunction: build_phase function void connect_phase( uvm_phase phase ); svid_agent.ingress_intf = ingress_intf; svid_agent.svid_ap.connect( svid_fc_sub.analysis_export ); svid_agent.svid_ap.connect( svid_sb.svid_packet_analysis_export ); endfunction: connect_phase endclass // svid_packet_checking_env endpackage // uvm_svid_monitor_package