// 
// -------------------------------------------------------------
//    Copyright 2004-2008 Synopsys, Inc.
//    Copyright 2008-2009 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 __VMM_RAL
`define __VMM_RAL

`ifdef VMM_RAL_IN_PACKAGE
package vmm_ral_pkg;
`endif

`include "RAL/vmm_ral.sv"

`ifdef VMM_RAL_IN_PACKAGE
endpackage
`endif

`endif // __VMM_RAL

`ifdef VMM_RAL_IN_PACKAGE
import vmm_ral_pkg::*;
`endif

