This is a simple case study on the APB3 VIP which I built in my spare time. The architecture will be similar to some models you might have seen online, but mostly it is different but still easy to understand. I'll start with explaining the testplan, checkplan, then the architecture of the UVM VIP itself and then we'll move onto the file structure of the VIP. Also, it will give you an idea of how a test plan is supposed to look like.
Advice to any new reader : If you are feeling this is too overwhelming, then these are the things I recommentd you follow in order to understand this VIP.
1. Go through the VIP Package file
( HERE )
to understand the order of compilation
2. Understand the VIP Architecture and review the TOP FILE
( HERE )
to understand how the VIP and the RTL are interacting with each other.
3. Finally, take a simple test as a reference and review the code for all the components
/* vip_amba_apb_ms_uvm ( parent-directory ) |- common ( dir ) | |- include ( dir ) | | |- vip_amba_apb_common_defines.svh | | |- vip_amba_apb_common_parameters.svh | | | |- vip_amba_apb_env_config.sv | |- vip_amba_apb_interface.sv | |- vip_amba_apb_test_config.sv | |- vip_amba_apb_txn_item.sv | |- bfm ( dir ) | |- master_bfm ( dir ) | | |- include ( dir ) | | | |- vip_amba_apb_bridge_bfm_defines.svh | | | | | |- vip_amba_apb_bridge_bfm.sv | | |- vip_amba_apb_bridge_bfm_interface.sv | | | |- slave_bfm ( dir ) | |- include ( dir ) | | |- vip_amba_apb_slave_bfm_defines.svh | | | |- vip_amba_apb_slave_bfm.sv | |- vip_amba_apb_slave_bfm_interface.sv | |- env ( dir ) | |- environment ( dir ) | | |- vip_amba_apb_env.sv | | | |- monitor ( dir ) | | |- include ( dir ) | | | |- vip_amba_apb_monitor_error_id.svh | | | |- vip_amba_apb_monitor_include.svh | | | | | |- vip_amba_apb_assertion.sv | | |- vip_amba_apb_cover_collector.sv | | |- vip_amba_apb_monitor.sv | | |- vip_amba_apb_monitor_agent.sv | | | |- scoreboard ( dir ) | | |- vip_amba_apb_scoreboard.sv | | |- vip_amba_apb_scoreboard_agent.sv | | | |- master ( dir ) | | |- vip_amba_apb_master_agent.sv | | |- vip_amba_apb_master_driver.sv | | |- vip_amba_apb_master_sequencer.sv | | | |- slave ( dir ) | |- vip_amba_apb_slave_agent.sv | |- vip_amba_apb_slave_driver.sv | |- vip_amba_apb_slave_sequencer.sv | |- seq ( dir ) | |- seq_list ( dir ) | | |- vip_amba_apb_callbacks.sv | | |- vip_amba_apb_sequences.sv | | | |- vip_amba_apb_base_sequence.sv | |- test ( dir ) | |- test_list ( dir ) | | |- vip_amba_apb_master_tests.sv | | | |- vip_amba_apb_base_test.sv | |- sim_run ( dir ) |- Makefile |- apb_filter.filter |- comp_filelist ( dir ) | |- compile_filelist.list | |- dut_integration_top ( dir ) | |- vip_amba_apb_vip_dut_top.sv | |- gtkapb.gtkw |- regress_script.sh |- regression_list.list |- regression_list_slave.list |- summary_script.sh |- tb_top ( dir ) | |- vip_amba_apb_tb_top.sv | |- vip_pkg ( dir ) | |- vip_amba_apb_pkg.sv | |- wave.do */