1# Copyright (c) 2008 Princeton University 2# Copyright (c) 2009 Advanced Micro Devices, Inc. 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions are 7# met: redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer; 9# redistributions in binary form must reproduce the above copyright 10# notice, this list of conditions and the following disclaimer in the 11# documentation and/or other materials provided with the distribution; 12# neither the name of the copyright holders nor the names of its 13# contributors may be used to endorse or promote products derived from 14# this software without specific prior written permission. 15# 16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27# 28# Author: Tushar Krishna 29# 30 31from m5.params import * 32from m5.proxy import * 33from m5.objects.Network import RubyNetwork 34from m5.objects.BasicRouter import BasicRouter 35from m5.objects.ClockedObject import ClockedObject 36 37class GarnetNetwork(RubyNetwork): 38 type = 'GarnetNetwork' 39 cxx_header = "mem/ruby/network/garnet2.0/GarnetNetwork.hh" 40 num_rows = Param.Int(0, "number of rows if 2D (mesh/torus/..) topology"); 41 ni_flit_size = Param.UInt32(16, "network interface flit size in bytes") 42 vcs_per_vnet = Param.UInt32(4, "virtual channels per virtual network"); 43 buffers_per_data_vc = Param.UInt32(4, "buffers per data virtual channel"); 44 buffers_per_ctrl_vc = Param.UInt32(1, "buffers per ctrl virtual channel"); 45 routing_algorithm = Param.Int(0, 46 "0: Weight-based Table, 1: XY, 2: Custom"); 47 enable_fault_model = Param.Bool(False, "enable network fault model"); 48 fault_model = Param.FaultModel(NULL, "network fault model"); 49 garnet_deadlock_threshold = Param.UInt32(50000, 50 "network-level deadlock threshold") 51 52class GarnetNetworkInterface(ClockedObject): 53 type = 'GarnetNetworkInterface' 54 cxx_class = 'NetworkInterface' 55 cxx_header = "mem/ruby/network/garnet2.0/NetworkInterface.hh" 56 57 id = Param.UInt32("ID in relation to other network interfaces") 58 vcs_per_vnet = Param.UInt32(Parent.vcs_per_vnet, 59 "virtual channels per virtual network") 60 virt_nets = Param.UInt32(Parent.number_of_virtual_networks, 61 "number of virtual networks") 62 garnet_deadlock_threshold = Param.UInt32(Parent.garnet_deadlock_threshold, 63 "network-level deadlock threshold") 64 65class GarnetRouter(BasicRouter): 66 type = 'GarnetRouter' 67 cxx_class = 'Router' 68 cxx_header = "mem/ruby/network/garnet2.0/Router.hh" 69 vcs_per_vnet = Param.UInt32(Parent.vcs_per_vnet, 70 "virtual channels per virtual network") 71 virt_nets = Param.UInt32(Parent.number_of_virtual_networks, 72 "number of virtual networks") 73