// 
// -------------------------------------------------------------
//    Copyright 2004-2011 Synopsys, Inc.
//    Copyright 2010 Mentor Graphics Corporation
//    All Rights Reserved Worldwide
// 
//    Licensed under the Apache License, Version 2.0 (the
//    "License"); you may not use this file except in
//    compliance with the License.  You may obtain a copy of
//    the License at
// 
//        http://www.apache.org/licenses/LICENSE-2.0
// 
//    Unless required by applicable law or agreed to in
//    writing, software distributed under the License is
//    distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
//    CONDITIONS OF ANY KIND, either express or implied.  See
//    the License for the specific language governing
//    permissions and limitations under the License.
// -------------------------------------------------------------
// 

`ifndef APB__SV
`define APB__SV

`include "apb_if.sv"
`include "uvm_macros.svh"

package apb_pkg; 

  import uvm_pkg::*;

  typedef virtual apb_if apb_vif;

  typedef class apb_agent;

 `include "apb_rw.sv"
 `include "apb_config.sv"
 `include "apb_master.sv"
 `include "apb_monitor.sv"
 `include "apb_sequencer.sv"
 `include "apb_agent.sv"
endpackage

`endif
