All components are extended from one of two base classes :
avm_named_component :
- Maintains name hierarchy based on instantiation
- Manages hierarchical connections of ports and exports
- Includes built-in message handling and reporting
avm_verification_component:
- Extended from avm_named_component
Adds a user-defined run() method
- 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
|