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

`ifndef VMM_HW_DATA_WIDTH
`define VMM_HW_DATA_WIDTH 1024
`endif

`ifdef VMM_HW_SYNTHESIS_ON
`else
   `include "vmm.sv"
`endif

`include "HAL/vmm_hw_rtl.sv"
`ifdef VMM_HW_SYNTHESIS_ON
`else
   `include "HAL/vmm_hw_version.sv"
   `include "HAL/vmm_hw_port.sv"
   `ifdef VMM_HW_ARCH_NULL
      `include "HAL/vmm_hw_arch_null.sv"
   `endif
  
`endif

`endif // VMM_HW__SV
