Home Methodologies AVM Tutorial Components
Main Menu
Home
System Verilog
Verilog
Methodologies
    - OVM Tutorial
    - OVM Example
    - UVM
    - VMM
    - VMM RAL
    - VMM Example
    - AVM Tutorial
        -- Introduction
        -- AVM Components
        -- Analysis Port export
        -- TLM In AVM
        -- Analysis Port
        -- TLM Channels
        -- Components
        -- Transaction
        -- Transactor
        -- Environment
        -- Messaging
Open Vera
Digital Concepts
Verification Basics
Protocols
Scripting
Articles
Videos
Interview Questions
Computer Architechture
C and C++
Blog/Article
AsicGuru Blog
Tags Cloud
Ads
Usefull Sites
Know Your IP/Location
Local Information India
Buy Car/Inverter Batteries
Real Estate India
Sports Accessories India
AVM Components
Share This Articale:

All components are extended from one of two base classes :

avm_named_component :

  1. Maintains name hierarchy based on instantiation
  2. Manages hierarchical connections of ports and exports
  3. Includes built-in message handling and reporting

avm_verification_component:

  1. Extended from avm_named_component
    Adds a user-defined run() method
  2. Includes process control for suspend, resume, kill
    Defines static run_all() method that calls run() on every avm_verification_component

 

AVM Named Component

Base class from which all components are derived
Builds static associative array of component names
Each child appends its name to that of its parent
Name for each component passed in via new()
Names are used when issuing messages for components

class bot_c extends avm_named_component;
    ...
    endclass
class mid_c extends avm_named_component;
    bot_c b1 = new(“b1”,this);
    bot_c b2 = new(“b2”,this);
    ...
    endclass
class top_c extends avm_named_component;
    mid_c m1 = new(“m1”,this);
    mid_c m2 = new(“m2”,this);
    ...
Endclass
class my_env extends avm_env;
    top_c t1 = new(“t1”);
    top_c t2 = new(“t2”);
    ...
endclass

Provides hierarchical naming throughout the environment
Class instance names are essentially invisible
HDL modules have an automatic hierarchy of instance names
Need to be able to identify and control specific class instances
 E.g. for messaging and configuration
avm_named_component provides a mechanism for instance naming
Internally, this is a static associative array indexed by string
Since it is static, the list of names is shared by all instances
Important so that instances can be uniquely identified
Provides the reporting infrastructure
Every avm_named_component has its own local message handler
Together with the naming facilities, provides per-instance configuration of VIP reporting actions
Provides access to the connectivity infrastructure
All verification objects are extended from avm_named_component

 

avm_named_component methods :

Constructor
Name and parent are set here
Any children should be initialized
Connect()
Export_connections();
Import_connections();
Report() (optional)

 

 

AVM Verification Component :

Base class from which all runnable components are derived

virtual class avm_verification_component extends avm_named_component;
    local static avm_verification_component s_component_registry[$];
    process m_main_process;
    function new( string name = "" , avm_named_component parent = null ) ;
        super.new( name , parent );
        s_component_registry.push_back( this );
    endfunction
    static task run_all;
        ...; fork s_component_registry[j].m_main_process = process::self;
        s_component_registry[j].run(); join_none ...
    endtask
    static task kill_all;
        ...; s_component_registry[i].m_main_process.kill; ...
    endtask
    virtual task run();
    endtask
endclass

This Articles is written/submitted by puneet (Puneet Aggarwal). You can also contribute to Asicguru.com. Click here to start


Prev << TLM Channels

Next >> Transaction

 
Login/Register
Register
Sign In
Login with :-
gmail-yahoo-twitter-facebook
| | |  
  •  
  • Bookmark
    ADS